VBA If else then?

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.

Woher ich das weiß:Berufserfahrung – Programmierer
Franc693 
Fragesteller
 05.08.2019, 09:50

Mir ist bewusst, dass es einfacher geht. Darum bin ich hier und frage.

Danke für die Hilfe ich probiers mal aus!

2
derDennis99de  05.08.2019, 09:50

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

3
Suboptimierer  05.08.2019, 09:51
@derDennis99de

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.

2
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.

Suboptimierer  05.08.2019, 10:00

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.

1
Franc693 
Fragesteller
 05.08.2019, 10:07

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.

1
Iamiam  06.08.2019, 00:18

Sehr gute AW, DH!

Hast du das am SmP erstellt, weil da Thema anstatt then steht? Sieht aus wie eine Autovervollständigung!

0
holgerholg  06.08.2019, 07:32
@Iamiam

Ja, das war vermutlich die Autokorrektur von Android.

0

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

Woher ich das weiß:eigene Erfahrung
Franc693 
Fragesteller
 05.08.2019, 09:48

Danke!

1