VBA If else then?
Hallo!
Ich möchte ein Tool in VBA erstellen. Basis bildet eine Tabelle, in der Teile gelistet und deren Zustand eingetragen werden sollen. Entsprechend dem Zustand ergibt sich ein Wert von 5EUR doer 10EUR. Soweit habe ich es in VBA schon regeln können, nur soll die Liste beliebig lang werden und ich möchte nicht für die kommenden 300+ Zeilen die If-Else Formel immer aufs neue tippen. Gibt es eine Vereinfachung dafür?
Danke Im Voraus!
3 Antworten
Dich hat man wahrscheinlich in der Schule ins offene Messer laufen lassen, um Schleifen sinnvoll einführen zu können. Du solltest dir genau diese Frage stellen: "Geht das nicht einfacher?"
Mit einer Schleife wird es einfacher gehen. So in etwa sieht das dann aus. Warte aber am besten, bis ihr das dran habt:
For i = 2 To 2000
If not IsEmpty(Cells(i, 2)) then
Cells(i,3).Value = 5
If Cells(i,2).Value = "Neu" then _
Cells(i,3).Value = 10
End If
Next
(ungetestet)
Ich würde "EUR" nicht in die Zelle schreiben, sondern die Zelle entsprechend formatieren. Dann kannst du mit den Werten noch rechnen.
Ich wollte den Code noch einigermaßen transparent gestalten. In dem Stadium, in dem sich er Fragesteller befindet, ist es einfacher, den Bereich über die höchste Zeilennummer einzugrenzen.
Mir ist bewusst, dass es einfacher geht. Darum bin ich hier und frage.
Danke für die Hilfe ich probiers mal aus!
Dim i As Integer 'As Long, wenn es auch mehr als 32767 werden können
i=2
While cells(i, 2)<>""
If cells(i,2)="Neu" Thema
Cells(i,3)=10
Else
Cells(i,3)=5
End If
i=i+1
Wend
Ich hab jetzt in Spalte C nur Zahlen geschrieben (ohne Eur) dadurch funktionieren dann noch Summen und ähnliches. Für die Anzeige kann man einfach als Format Währung angeben (dafür z.B. Strg+1 drücken, Zellenformat auswählen und dann Währung auswählen.
Im Übrigen kann man das hier auch mit einer Excel-Formel lösen
In C2 schreiben:
=WENN(B2="";"";WENN(B2="Neu",10,5))
Und das dann runterziehen (bei englischem Excel muss da statt WENN IF stehen. Wenn du 5 Eur ins Feld schreiben willst, musst du
=WENN(B2="";"";WENN(B2="Neu","10 Eur","5 Eur"))
verwenden.
Der Vorteil der Formel ist, dass sie sofort ausgeführt wird, wenn der Wert in Spalte B eingetragen wird während man das Makro extra ausführen muss.
Zu beachten ist, dass der Code abbricht, wenn zwischendurch eine Zeile fehlt.
Das kann mit einer for-Schleife
For i=2 to Cells.SpecialCells(xlCellTypeLastCell).Row
...
Next
Verhindert werden.
Gut Danke! Wie genau würde denn die Excel Formal aussehen? Kannst du mir das kurz aufzeigen? Es wäre natürlich besser, da das Ergebnis sofort erscheint ohen ein Macro ausführen zu müssen.
Sehr schön die Lösung mit While.
Ich verwende in der Praxis so häufig For-Schleifen, dass ich manchmal ganz die Schwestern vergesse.
Sehr gute AW, DH!
Hast du das am SmP erstellt, weil da Thema anstatt then steht? Sieht aus wie eine Autovervollständigung!
Hallo,
ja das geht aufjeden Fall einfacher!
schau dir mal Select Case an:https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference/statements/select-case-statement
+
eine Schleiffe die Zeile für Zeile bis zur letzten beschriebenen Zeile geht.
Kurtz: Du brauchst eine Schleife die bis zur letzten beschriebenen Zeile geht. In dieser schleife eine Select Case Anweisung.
Gruß
Dennis
Problem ist nur das die Schleife nur bis 2000 Datensätzen geht. Was währe, wenn es mal irgendwann mehr werden? ;)
ich würde anstatt der 2000 die Variable "letztezeile" eintragen.
also: letztezeile = ActiveSheet.Cells(Rows.Count,2).End(xlUp).Row
die 2 sagt die Spalte aus. Bei 1 ist es Spalte A