Excel: Wenn Begriff auftaucht, dann in Spalte X eine Zahl multiplizieren

  • Allgemein

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Excel: Wenn Begriff auftaucht, dann in Spalte X eine Zahl multiplizieren

    Hi zusammen,

    ich versuch mich derzeit mit VBA, weil ich mir dachte, ich könnte das gut nutzen um meine Excel-Dateien von Lieferanten so automatisch umstellen zu lassen, dass daraus eine saubere Importdatei wird.

    Soweit so gut, ich hab mir also erst mal das Buch "Einstieg in VBA mit Excel" geholt (Thomas Theis), bin nun auf Seite 116 angelagt und dachte mir, dass das bisherige Wissen ausreicht um folgendes auszuführen:

    ich habe ein Preisliste in der in Spalte D der Hersteller genannt ist.
    In Spalte J ist der dazugehörige Verkaufspreis genannt. Dieser soll bei einem bestimmten Hersteller upgedatet werden.

    Nun dachte ich, dass der Befehl grundsätzlich so heißen könnte:

    WENN in Spalte D der Begriff ABC auftaucht, DANN multiplizierst du (in der selben Zeile) J mit 1.2 und wirfst das Ergebnis in Spalte W aus.
    Das Auswerfen in Spalte W hab ich deshalb so gewählt, weil ich nicht wusste ob er mir den Betrag in J einfach überschreibt oder ob es da zu Probleme kommen kann wenn ich sage will "J * 1.2 = J".
    Aber soweit kams garnicht, weil ich das Ding garnicht zum Laufen bekomme ;)

    Übersetzt in einen Code hätte ich mir das in etwa so gedacht:

    VB.NET-Quellcode

    1. Sub test()
    2. Dim i As Integer
    3. Range("w:w").NumberFormatLocal = "#00,00 €"
    4. If Range("d:d").Value = ("abc") Then
    5. For i = 4 To 15000
    6. Cells(i, 20).Value = Cells(i, 10).Value * 1.2
    7. Next i
    8. End If
    9. End Sub


    Bei "IF Range..." bricht er mir aber schon ab :(

    Was mach ich falsch? Mit LIKE hab ich auch schon rumprobiert, aber da krieg ich auch nix zusammen...

    Danke euch schon mal ;)
    Das lässt sich auch mit Excel Formel lösen.
    Formel in W2:

    Quellcode

    1. =J2*Wenn(D2="ABC";1.2;1)


    Ansonsten, wenn du VBA verwenden willst, packst du die Abfrage in die Schleife

    VB.NET-Quellcode

    1. For i = 4 To 15000
    2. Cells(i, 20).Value = Cells(i, 10).Value * IIf(Cells(i,4).Value="abc",1.2,1))
    3. Next i

    Oder

    VB.NET-Quellcode

    1. For i = 4 To 15000
    2. If Cells(i,4).Value="abc" Then Cells(i, 20).Value = Cells(i, 10).Value * 1.2
    3. Next i
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    aaaaaah, achso, ich kann damit CELLS rangehen und nicht mit RANGE :)

    cool, hat geklappt!

    und jetzt noch was mit dran: wie könnte ich

    a) die beträge auf die Zehnerstelle hinterm Komma runden?
    b) die Werte aus der Spalte 23 in die Spalte 10 kopieren?

    ich hätte es so probiert:

    VB.NET-Quellcode

    1. For i = 4 To 15000
    2. If Cells(i, 4).Value = "abc" Then Cells(i, 23).Value = _
    3. Application.Round(Cells(i, 10).Value * 1.15, 1)
    4. Cells(i, 23).Copy Destination:=Cells(i, 10)
    5. Next i


    nun rundet er mir schon auch mal sauber eine Stelle hinterm Komma, nur das Kopieren haut nicht hin.
    Er löscht nämlich alle anderen Zahlen aus i,10, weil bei denen ja in i,20 nix drinsteht...

    Wie kann ich dem also sagen, dass nur die nimmt, die er grad berechnet hat?

    Ich hätts mit einem AND verknüpft (nach application.round....), aber das mag er nicht.

    EDIT:

    jetzt hab ichs :)

    VB.NET-Quellcode

    1. Dim i As Integer
    2. For i = 4 To 15000
    3. If Cells(i, 4).Value = "abc" And Cells(i, 10).Value <= 100 Then
    4. Cells(i, 23).Value = _
    5. Application.Round(Cells(i, 10).Value * 1.15, 1)
    6. End If
    7. Next i
    8. For i = 4 To 15000
    9. If Cells(i, 23).Value > 0 Then
    10. Cells(i, 23).Copy Destination:=Cells(i, 10)
    11. End If
    12. Next i
    13. MsgBox "Fertig"


    jetzt hab ich sogar noch eine Bedingung reingemacht:
    wenn ABC auftaucht, soll er die Beträge in i,10 mit 1.15 multiplizieren, aber nur wenn die Beträge in i,10 kleiner 100 sind.
    Anschließend soll er die Werte aus i,20 die größer als 0 sind nach i,10 kopieren.

    geht einwandfrei :)

    hätt ichs noch schöner machen können?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Desecrator“ ()