Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 811 Skopiuj do schowka Funkcja IF
Autor Wiadomość
guss 
Starszy Forumowicz


Posty: 43
Wysłany: 29-03-2007, 14:23   Funkcja IF

Mam takie makro na formie:

Private Sub CommandButton1_Click()
nr = Label2

If nr = 1 Then
kod
end if

If nr = 2 Then
kod
end if

itd

I tak 52 funkcje if ( dla konkretnych tygodni)
Każda funkcja się różni bo odnosi się do różnych arkuszy.
A czy można utworzyc procedurę która obejmowała kilka następujących po sobie funkcji if?
Spróbowałem przed wszystkimi funkcjami wpisac:

Label8 = a
Label9 = b
For nr = a To b Step 1
Next nr
gdzie a i b to zakres od a do b ale nic sie nie dzieje
Dziękuje za jakąkolwiek pomoc
Tomek
ID posta: 4219 Skopiuj do schowka
 
 
Tajan


Pomógł: 5591 razy
Posty: 12114
Wysłany: 29-03-2007, 20:05   

Nie bardzo rozumiem, co ma się dziać, skoro między For i Next nie ma żadnego kodu?
Musisz tam umieścić instrukcje, które będą wykonywane dla kolejnych wartości przyjmowaną przez zmienną nr. Chociażby te, które masz na poczatku postu:
Kod:

For nr = a To b
   If nr = 1 Then
      'kod
   ElseIf nr = 2 Then
      'kod
   ElseIf nr = 3 Then
      'kod
   End If
Next nr


Jednak tego typu konstrukcje nie zawsze są konieczne, jeżeli instrukcje enigmatycznie nazwane przez Ciebie "kod" sa do siebie bardzo podobne, różniąc sie np. wartościami zależnymi od zmiennej "nr". Jeżeli, przykładowo, chcesz nadać wartość komórkom A1 wybranych arkuszy to możesz zrobić to tak:
Kod:

For nr = a To b
   If nr = 1 Then
      Sheets("arkusz1").Range("A1")="wartość"
   ElseIf nr = 2 Then
     Sheets("arkusz2").Range("A1")="wartość"
   ElseIf nr = 3 Then
      Sheets("arkusz3").Range("A1")="wartość"
   End If
Next nr


Ale taki sposób jest mało efektywny. Zamiast tworzyć wiele sekcji instrukcji If-ElseIf, wystarczy wykorzystać zmienną "nr" do utworzenia nazwy danego arkusza i całkowicie zrezygnować z instrukcji If:
Kod:

For nr = a To b
      Sheets("arkusz" & nr).Range("A1")="wartość"
Next nr


W ten sposób nasz kod zostanie wykonany tylko dla arkuszy, których nazwy określi nam zmienna "nr", zmieniając swoją wartość przy każdym przebiegu pętli.
ID posta: 4228 Skopiuj do schowka
 
 
guss 
Starszy Forumowicz


Posty: 43
Wysłany: 31-03-2007, 07:58   

Witam
Widzisz Tajan jestem na etapie nagrywania makr i przerabiania ich dla własnych potrzeb.
Dzięki za pomoc (w zlym miejscu dawalem "next").
Mam jeszcze pytanie.Kod wygląda tak:

Kod:
If nr = 1 Then

  Sheets(nr).Select
ActiveWorkbook.Names.Add Name:="kryt11", RefersToR1C1:="='1'!R5C1:R111C1"
ActiveWorkbook.Names.Add Name:="kryt21", RefersToR1C1:="='1'!R5C2:R111C2"
ActiveWorkbook.Names.Add Name:="kryt31", RefersToR1C1:="='1'!R5C3:R111C3"
ActiveWorkbook.Names.Add Name:="kryt41", RefersToR1C1:="='1'!R5C4:R111C4"
Sheets("suma").Select
    Range("f5").Select
    Selection.FormulaArray = _
        "=IF(ISNA(INDEX(suma1,MATCH(4,(kryt11=RC[-5])+(kryt21=RC[-4])+(kryt31=RC[-3])+(kryt41=RC[-2]),0))),"""",INDEX(suma1,MATCH(4,(kryt11=RC[-5])+(kryt21=RC[-4])+(kryt31=RC[-3])+(kryt41=RC[-2]),0)))"
       Selection.AutoFill Destination:=Range("f5:f111"), Type:=xlFillDefault

Else
End If

If nr = 2 Then

  Sheets(2).Select
ActiveWorkbook.Names.Add Name:="kryt12", RefersToR1C1:="='2'!R5C1:R111C1"
ActiveWorkbook.Names.Add Name:="kryt22", RefersToR1C1:="='2'!R5C2:R111C2"
ActiveWorkbook.Names.Add Name:="kryt32", RefersToR1C1:="='2'!R5C3:R111C3"
ActiveWorkbook.Names.Add Name:="kryt42", RefersToR1C1:="='2'!R5C4:R111C4"
Sheets("suma").Select
    Range("g5").Select
   Selection.FormulaArray = _
        "=IF(ISNA(INDEX(suma2,MATCH(4,(kryt12=RC[-6])+(kryt22=RC[-5])+(kryt32=RC[-4])+(kryt42=RC[-3]),0))),"""",INDEX(suma2,MATCH(4,(kryt12=RC[-6])+(kryt22=RC[-5])+(kryt32=RC[-4])+(kryt42=RC[-3]),0)))"
    Selection.AutoFill Destination:=Range("g5:g111"), Type:=xlFillDefault


Else
End If


Czyli definiuje zakresy i wkleja formułę.
Czy można zrobi to za pomocą jednej funkcji :if"?
ID posta: 4297 Skopiuj do schowka
 
 
Trebor 
Excel Expert


Pomógł: 1752 razy
Posty: 4680
Wysłany: 31-03-2007, 09:28   

Sprawdź coś takiego
Kod:

ActiveWorkbook.Names.Add Name:="kryt1" & nr, RefersToR1C1:="='" & nr & "'!R5C1:R111C1"
ActiveWorkbook.Names.Add Name:="kryt2" & nr, RefersToR1C1:="='" & nr & "'!R5C2:R111C2"
ActiveWorkbook.Names.Add Name:="kryt3" & nr, RefersToR1C1:="='" & nr & "'!R5C3:R111C3"
ActiveWorkbook.Names.Add Name:="kryt4" & nr, RefersToR1C1:="='" & nr & "'!R5C4:R111C4"
Sheets("suma").Select
Cells(5, 5 + nr).FormulaArray = _
        "=IF(ISNA(INDEX(suma" & nr & ",MATCH(4,(kryt1" & nr & "=RC1)+(kryt2" & nr & "=RC2)+(kryt3" & nr & "=RC3)+(kryt4" & nr & "=RC4),0))),"""",INDEX(suma1,MATCH(4,(kryt1" & nr & "=RC1)+(kryt2" & nr & "=RC2)+(kryt3" & nr & "=RC3)+(kryt4" & nr & "=RC4),0)))"
    Cells(5, 5 + nr).AutoFill Destination:=Range(Cells(5, 5 + nr), Cells(111, 5 + nr)), Type:=xlFillDefault

Pozdrawiam
_________________
Trebbor@wp.pl
ID posta: 4298 Skopiuj do schowka
 
 
Tajan


Pomógł: 5591 razy
Posty: 12114
Wysłany: 01-04-2007, 08:53   

Dopowiem, że kodu Trebora możesz użyć tak:
Kod:
Private Sub CommandButton1_Click()
Dim nr As Long
nr = Label2
' tu kod
End Sub

lub tak:
Kod:

Private Sub CommandButton1_Click()
Dim a As Long, b As Long, nr As Long
a = Label8
b = Label9
For nr = a To b Step 1
'tu kod
Next nr
End Sub

Pierwszy przykład wykona się tulko raz, dla numeru, który jest umieszczony w etykiecie Label2. Natomiast drugi przykład wykona się tyle razy, ile wynosi różnica między wartościami przypisanymi do Label8 i Label9.
ID posta: 4320 Skopiuj do schowka
 
 
guss 
Starszy Forumowicz


Posty: 43
Wysłany: 01-04-2007, 09:36   

Bardzo dziękuję.Działa bez zarzutu.
ID posta: 4322 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

Strona uĹźywa plikĂłw cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przegl�darce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe