Clever-Excel-Forum

Normale Version: kleines Makro
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich versuche gerade ein Makro zu schreiben und bin ein wenig überfordert.

Ich habe eine Tabelle, und ich habe einen Button.
Ich möchte gerne, dass der Button folgendes macht:

Er soll in Spalte X gehen und alle Zeilen auswählen, die dort die Zahl/Buchstaben A haben.
Dann soll er in Zeile Y den Wert B zu der Zahl addieren, die dort schon steht, und den ersetzen.
Außerdem soll er in Zeile Z nein mit ja ersetzen.

Ich bekomme Teile von dem Makro hin, scheitere aber insbesondere am ersten Teil, wo er die Zeilen auswählt.
Da bei der Tabelle immer mal wieder Zeilen hinzugefügt werden, kann ich auch leider nicht einfach die Zelle F1 oder G35 im Makro festlegen.

Falls mir da jemand helfen könnte, wäre das super!

P.S.
Ich hab vorher selbstverständlich gegoogelt, aber war leider nicht erfolgreich.
Hallo,

dann lade eine Beispielmappe hoch, nachbauen wird dir das vermutlich keiner.
Außerdem überdenke nochmal die Aussage

Zitat:Er soll in Spalte X gehen und alle Zeilen auswählen, die dort die Zahl/Buchstaben A haben.
Dann soll er in Zeile Y den Wert B zu der Zahl addieren, die dort schon steht, und den ersetzen.
Außerdem soll er in Zeile Z nein mit ja ersetzen.
Was soll man damit anfangen?

Erst schreibst du von Spalte X, dann auf einmal von Zeile Y und Zeile Z. Was denn nun? Es gibt nur Spalten mit Buchstabenbezeichnungen, Zeilen haben Nummern.
Und "die dort Zahl/Buchstaben A haben" ist auch unverständlich. Was soll eine Zahl A sein?

Die Beispielmappe enthält ein paar Zeilen sowie in einer separaten Tabelle das Wunschergebnis.
Hallo Ichkannkeinvba,

vielleicht änderst du ja bald deinen Namen in "Ichkannbaldvba" Wink
(Welche Version ist "1908"?)

Zu deinem Makro: ich habe dir mal ein einfaches Makro beigefügt. Dabei bin ich von deinen Angaben ausgegangen, dass du wirklich in den Spalten "X" bis "Z" etwas ändern möchtest. Gewöhne dich am besten schon am Anfang daran, Variablen zu deklarieren, das spart später die Fehlersuche. In meinem Beispiel habe ich 4 Variablen definiert:
"MeinBereich" ist der Bereich in Spalte "X", wo du suchen möchtest. Ich gehe davon aus, dass die Spalte eine Überschrift hat, daher beginnt der Bereich in "X2".
"letzteZeile" ist die letzte Zeile in Spalte "X".
"Zelle" ist jede Zelle (in deinem Bereich), die in einer Schleife durchlaufen wird.
"WertB" ist die Zahl, die ich von deinem "Wert B" habe. Vielleicht legst du die aber auch in deiner Tabelle irgendwo fest.

Die Schleife (beginnt mit "For Each ...") durchläuft nun den Bereich und prüft, ob die aktuelle Zelle den Wert "A" enthält. Wenn ja, dann multipliziert er den Wert in der 1. Nachbarzelle (Offset) mit dem "Wert B" und schreibt in die 2. Nachbarzelle ein "ja". Ich weiß nicht, ob du bei dem letzten Schritt noch erst prüfen möchtest, ob da vorher ein "nein" stand.

Code:
Sub MeinMakro()

    Dim MeinBereich As Range
    Dim letzteZeile As Long
    Dim Zelle As Range
    Dim WertB As Integer
       
    letzteZeile = ActiveSheet.Range("X" & Rows.Count).End(xlUp).Row
    Set MeinBereich = ActiveSheet.Range("X2:X" & letzteZeile)
    WertB = 5

    For Each Zelle In MeinBereich
        If Zelle.Value = "A" Then
            Zelle.Offset(0, 1) = Zelle.Offset(0, 1) * WertB
            Zelle.Offset(0, 2) = "ja"
        End If
    Next

End Sub
(04.06.2020, 16:50)MisterBurns schrieb: [ -> ]Hallo,

dann lade eine Beispielmappe hoch, nachbauen wird dir das vermutlich keiner.
Außerdem überdenke nochmal die Aussage

Was soll man damit anfangen?

Erst schreibst du von Spalte X, dann auf einmal von Zeile Y und Zeile Z. Was denn nun? Es gibt nur Spalten mit Buchstabenbezeichnungen, Zeilen haben Nummern.
Und "die dort Zahl/Buchstaben A haben" ist auch unverständlich. Was soll eine Zahl A sein?

Die Beispielmappe enthält ein paar Zeilen sowie in einer separaten Tabelle das Wunschergebnis.
Ich bin offenbar zu blöd, eine Beispielmappe hochzuladen - Wie geht das?

Mit X, Y, und Z sind einfach irgendwelche variablen Zeilen/Spalten gemeint.
So wie man auch in Mathe x = y + z als Formel nehmen kann.
Und mit Zahl A ist genauso eine variable Zahl gemeint, das kann 100, 1000 oder was auch immer sein.
Falls das unverständlich war, tut mir das Leid, mir erschien das logisch, als ich es geschrieben habe.

(04.06.2020, 16:57)LuckyJoe schrieb: [ -> ]Hallo Ichkannkeinvba,

vielleicht änderst du ja bald deinen Namen in "Ichkannbaldvba" Wink
(Welche Version ist "1908"?)

Zu deinem Makro: ich habe dir mal ein einfaches Makro beigefügt. Dabei bin ich von deinen Angaben ausgegangen, dass du wirklich in den Spalten "X" bis "Z" etwas ändern möchtest. Gewöhne dich am besten schon am Anfang daran, Variablen zu deklarieren, das spart später die Fehlersuche. In meinem Beispiel habe ich 4 Variablen definiert:
"MeinBereich" ist der Bereich in Spalte "X", wo du suchen möchtest. Ich gehe davon aus, dass die Spalte eine Überschrift hat, daher beginnt der Bereich in "X2".
"letzteZeile" ist die letzte Zeile in Spalte "X".
"Zelle" ist jede Zelle (in deinem Bereich), die in einer Schleife durchlaufen wird.
"WertB" ist die Zahl, die ich von deinem "Wert B" habe. Vielleicht legst du die aber auch in deiner Tabelle irgendwo fest.

Die Schleife (beginnt mit "For Each ...") durchläuft nun den Bereich und prüft, ob die aktuelle Zelle den Wert "A" enthält. Wenn ja, dann multipliziert er den Wert in der 1. Nachbarzelle (Offset) mit dem "Wert B" und schreibt in die 2. Nachbarzelle ein "ja". Ich weiß nicht, ob du bei dem letzten Schritt noch erst prüfen möchtest, ob da vorher ein "nein" stand.

Code:
Sub MeinMakro()

    Dim MeinBereich As Range
    Dim letzteZeile As Long
    Dim Zelle As Range
    Dim WertB As Integer
       
    letzteZeile = ActiveSheet.Range("X" & Rows.Count).End(xlUp).Row
    Set MeinBereich = ActiveSheet.Range("X2:X" & letzteZeile)
    WertB = 5

    For Each Zelle In MeinBereich
        If Zelle.Value = "A" Then
            Zelle.Offset(0, 1) = Zelle.Offset(0, 1) * WertB
            Zelle.Offset(0, 2) = "ja"
        End If
    Next

End Sub

Version 1908 ist die Version, die ich sehe, wenn ich unter Datei-->Konto-->Info zu Excel nachschaue.

Deinem Makro kann ich leider nicht ganz folgen, ich kann halt wirklich kein VBA...


Ich habs jetzt hinbekommen, ein Beispiel hochzuladen:
Ich habe verschiedene Produkte, mit dazugehörigen Produktgruppen.
Ich würde jetzt gerne einen Button erstellen, der nach der Produktgruppe sucht (im Beispiel Gruppe 2) und dann bei Anzahl eine feste Menge (z.B. 100) hinzufügt.
Außerdem soll der Knopf in der Spalte "heute produziert?" das nein in ein ja ändern.

Ich hoffe das ist verständlicher als mein ursprünglicher Post.
Auf jeden Fall schon mal danke für eure Hilfe.

Hab ich es jetzt hinbekommen?

Ja :)
Code:
Sub Aendern()
Dim PG As Long, Menge As Long, i As Long, letzte As Long

PG = InputBox("Bitte Produktgruppe eingeben")
Menge = InputBox("Bitte gewünschte Menge eingeben, die addiert werden soll")

With Sheets("Tabelle1")
    letzte = .Cells(Rows.Count, 1).End(xlUp).Row

    If PG <> 0 And Menge <> 0 Then
        For i = 2 To letzte
            If .Cells(i, 2) = PG Then
                .Cells(i, 3) = .Cells(i, 3) + Menge
                .Cells(i, 4) = "Ja"
            End If
        Next i
    Else
        MsgBox "Produktgruppe oder Menge wurden nicht eingegeben"
    End If
End With

End Sub

Setzt voraus, dass die Produktgruppe tatsächlich eine Zahl ist und auch als solche in der Spalte erfasst ist.

BTW: Bitte zitiere nicht weiter komplette Beiträge, das bläht den Thread nur unnötig auf und erschwert das Lesen.
Vielen lieben Dank für die Hilfe, das war genau das was ich brauchte.