760 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

ich habe eine Select Case - Abfrage in einem Code. Ich möchte für den Fall, daß der Case zutrifft mehrere Befehle ausführen, z.B. : Range("A1")=3, Range("A2)"=5 [code][

Es scheint aber nur mit einer Nachfolgeanweisung zu funltionieren...
Hat jemand einen Tipp??
Danke und Gruß Andreas

4 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

zeig mal deinen code

case Anweisungen sind ein wenig schneller als if abfragen
wobei eine Verschachtelung dem entgegenwirkt denke ich

gruss nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

hier der Code (vereinfacht):
Sub test()

Dim dblBetrag As Double, dblBeitrag As Double, dblUmlage As Double

For i = 1 To 9

Select Case Cells(i, 1)
Case 220.7: Cells(i, 8) = 210
Case 371.4: Cells(i, 8) = 350
Case 110.7: Cells(i, 8) = 100
Case 170.7: Cells(i, 8) = 160
Case 321.7: Cells(i, 8) = 300
Case 75.7: Cells(i, 8) = 65
Case Else
Cells(i, 8) = Cells(i, 1)
End Select
Select Case Cells(i, 1)
Case 321.4, 371.4: Cells(i, 9) = 21.4
Case 220.7, 110.7, 170.7, 75.7: Cells(i, 9) = 10.7
Case Else
Cells(i, 8) = 0
End Select

Next

End Sub

Ich wollte die zweite Schleife sparen, da beide Bedingungen ober schon drin sind.
Gruß Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

wuesste jetzt keine Vereinfachung(schleifenverbannung)
Bereiche erfordern fast immer schleifen,denk ich

nur zur Beschleunigung,wie gehabt Daten in ein Array

gruss nighty
0 Punkte
Beantwortet von
Hallo Andreas,

Welche zweite Schleife meinst du? Ich sehe nur eine Schleife, dafür
aber zwei Select Case Blocks für die Bedingungen. Je nach
Aufgabe, kann es durchaus Sinn ergeben bestimmte Bedingungen
in mehreren Select Case Blocks unterzubringen, um sich unnötige
Tipparbeit zu sparen. Insofern hast du bereits eine einfache Variante
gewählt. Mann kann das ganze aber natürlich auch noch anders
darstellen. Allerdings habe ich deine Rundungsbedingung noch
nicht so ganz verstanden. Im oberen Block hast 321,7 und im
unteren 321,4 womit die eben befüllte Zelle(i,8) durch den unteren
Block über Case Else wieder auf 0 gesetzt wird.

Hier mal 2 mögliche Alternativdarstellungen deines Codes:
For i = 1 To 9
Select Case Cells(i, 1)
Case 220.7: Cells(i, 8) = 210: Cells(i, 9) = 10.7
Case 371.4: Cells(i, 8) = 350: Cells(i, 9) = 21.4
Case 110.7: Cells(i, 8) = 100: Cells(i, 9) = 10.7
Case 170.7: Cells(i, 8) = 160: Cells(i, 9) = 10.7
Case 321.4: Cells(i, 8) = 300: Cells(i, 9) = 21.4
Case 75.7: Cells(i, 8) = 65: Cells(i, 9) = 10.7
Case Else
Cells(i, 8) = Cells(i, 1)
End Select
Next
oder
For i = 1 To 9
Select Case Cells(i, 1)
Case 75 To 221
Cells(i, 8) = Int(Cells(i, 1) - 10)
Cells(i, 9) = 10.7
Case 300 To 400
Cells(i, 8) = Int(Cells(i, 1) - 21)
Cells(i, 9) = 21.4
Case Else
Cells(i, 8) = Cells(i, 1)
End Select
Next

Gruß Mr. K.
...