Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
letzten bestimmten Wert in Zeile finden
24.01.2023 15:43:55
Susanne
Liebe Excel-Gemeinde,
ich habe heute eine Herausforderung, welche mich schon Stunden aufhält. (Bin aber auch absoluter VBA Neuling und kann mir bisher nur über zusammenkopieren helfen.)
Ich bin auf der Suche nach einem bestimmten Wert in einer variablen Zeile, um dann rechts davon eine Spalte einfügen zu können.
Ursprünglich habe ich es in letzter Zeit immer mit Verknüpfungen versucht, aber wenn eine Schleife noch einmal durchläuft, kann ich nicht verhindern, dass ich eine weitere leere Spalte erhalte.
Im Anhang eine Beispieldatei (ähnliche Herausforderung hatte ich schon einmal vor sechs Wochen, jedoch wurde es da über eine Aggregats-Formel von Werner gelöst. Nun soll es über VBA passieren, um weitere Veränderungen vornehmen zu können (auch das wurde von Onur mit Bezug zur Tabelle gelöst, jedoch kann ich den Schnipsel nicht so umbauen, dass es bei mir klappt.
Das ist mein Versuch, aber es wird die falsche Zelle markiert.
Sub test()
Dim Ergebnis As String
With Range("a8:r8")
Ergebnis = IIf(.Cells(.Cells.Count) = "Sales Value EUR", .Cells(.Cells.Count).End(xlToLeft), .Cells(.Cells. _
Count)).Select
End With
End Sub
Onurs Variante kann ich leider nicht umbauen:
Public Function FindeLetzten(Item As String, text As String, blatt As String, bereich As Range, offset As Long)
    Dim cell, adr1, adr2
    With Worksheets(blatt)
        For Each cell In .Range(bereich.Address)
            If cell.text = Item Then Set adr1 = cell
            If cell.text = text Then Set adr2 = cell
        Next
    End With
    FindeLetzten = Worksheets(blatt).Cells(adr1.Row, adr2.Column + offset)
End Function
Also: Ich suche nach der rechten Zelle "Sales Value EUR" in einer variablen Spalte und Zeile, um anschließend rechts davon zwei Spalten einfügen zu können (da sollen dann mal %-Steigerungen berechnet werden). Wird das Makro nochmal ausgeführt, soll keine weitere Spalte eingefügt werden.
Mehr wäre es nicht. Für mich jedoch zu viel. Ich bitte um Unterstützung.
LGS
https://www.herber.de/bbs/user/157447.xlsx

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: letzten bestimmten Wert in Zeile finden
24.01.2023 17:46:48
GerdL
Hallo Susanne!
Sub Unit()
    Dim rngITEM As Range, SALES As Variant
    
    
    Set rngITEM = ActiveSheet.Cells.Find("Item", LookIn:=xlValues, lookat:=xlPart, MatchCase:=False)
    
    If rngITEM Is Nothing Then Exit Sub
    
    With rngITEM.Offset(-1, 1).EntireRow
        SALES = Application.CountIf(.Cells, "SALES Value EUR")
        If IsError(SALES) Then Exit Sub
        If IsEmpty(rngITEM.Offset(-1, 1 + SALES)) Then
            rngITEM.Offset(-1, 1 + SALES).Resize(1, 2).EntireColumn.Insert shift:=xlToRight
        End If
    End With
End Sub
Gruß Gerd
Anzeige
AW: letzten bestimmten Wert in Zeile finden
24.01.2023 18:29:39
Susanne
Hallo Gerd,
vielen Dank für die schnelle Antwort! Damit hab ich gar nicht gerechnet!
Leider passiert bei mir in der Tabelle gar nichts.
Wenn ich es in einer anderen Datei teste, bekomme ich leere Spalten hinzugefügt, jedoch nicht hinter der letzten "Sales Value EUR" sondern sehr viel weiter links.
Was könnte ich falsch machen?
LGS
Nochmal die Datei mit deinem Code eingebunden:
https://www.herber.de/bbs/user/157452.xlsm
AW: letzten bestimmten Wert in Zeile finden
24.01.2023 19:08:09
Yal
Hallo Susanne,
folgende "Test" auf die gegebene Funktion liefert in deine Beispieldatei 7. Also der letzte Treffer befindet sich in der Zeile 8 in Spalte 7.
Wird null zurückgegeben, dann ist nichts gefunden worden.
Function LetzteInSpalte_finden(Was As String, Zeile As Long, Optional ByVal Blatt As String) As Long
Dim gefunden As Range
Dim StartAdresse As String
Dim Spalte As Long
    
    If Blatt = "" Then Blatt = ActiveSheet.Name
    Set gefunden = Worksheets(Blatt).Rows(Zeile).Find(Was, LookIn:=xlValues, lookat:=xlPart, MatchCase:=False)
    If Not gefunden Is Nothing Then
        StartAdresse = gefunden.Address
        Spalte = gefunden.Column
        Do
            Set gefunden = Worksheets(Blatt).Rows(Zeile).Find(Was, After:=gefunden, LookIn:=xlValues, lookat:=xlPart, MatchCase:=False)
            If gefunden.Column > Spalte Then Spalte = gefunden.Column
        Loop While gefunden.Address > StartAdresse
    End If
    LetzteInSpalte_finden = Spalte
End Function
Sub test()
    MsgBox LetzteInSpalte_finden("Sales Value EUR", 8, "Tabelle3")
End Sub
VG
Yal
Anzeige
AW: letzten bestimmten Wert in Zeile finden
24.01.2023 19:26:04
Susanne
Hallo Yal,
schon mal vielen Dank für dein Mitwirken :)
so ganz weiß ich jedoch noch nicht, wie ich deinen Code verwenden soll. Aber bisher sagt mir die Messagebox "7".
Kann es sein, dass er sich auf die Zeile 8 bezieht? Tatsächlich kann diese Zeile nämlich mal eins höher oder tiefer sein.
LGS
AW: letzten bestimmten Wert in Zeile finden
25.01.2023 00:05:50
Yal
Hallo Susanne,
ja, Du scheinst entdeckt zu haben, dass der Code genau macht, was ich beschrieben habe. Das ist ein guter Anfang. Es ist nicht "VBA-bescheiden" sondern "ich habe absolut keine Ahnung und brauche eine vollständige Lösung, die ich nicht verstehen muss".
Aber heute ist es die 8. Zeile und morgen eine andere. Und dann?
VBA kann keine Gedanken lesen. Du musst selber Hand anlegen. Autofahren ist auch nicht sich fahren lassen (zumindest nicht zum Null-Tarif): man muss wissen, wie man die Kurve fährt und bremst.
VG
Yal
Anzeige
AW: letzten bestimmten Wert in Zeile finden
25.01.2023 09:39:52
Yal
Hallo Susanne,
eigentlich mag ich es nicht, der böse Bub zu spielen :-)
Hier ein angepasste aber immer noch nicht vollständigen Code:
Sub test()
Dim MaxSpalte As Long
Dim MaxZeile As Long
Dim i, tmp
Const cText = "Sales Value EUR"
    For i = 7 To 10 'Es werden die Zeilen 7 bis 10 geprüft
        tmp = LetzteInSpalte_finden(cText, i, "Tabelle3")
        If tmp > MaxSpalte Then
            MaxSpalte = tmp
            MaxZeile = i
        End If
    Next
    MsgBox "Linkste Vorkommen von """ & cText & """ in Zeile|Spalte " & MaxZeile & "|" & MaxSpalte & " gefunden."
End Sub
Folgendes musst Du machen: der Code auf Deutsch und laut sprechen. Du wirst dich selbst hören und merken, dass es gar nicht so kompliziert, wie es aussieht:
"für eine Variable i, die die Wert 7 bis 10 annehmen wird,
starte die Funktion LetzteInSpalte_finden mit den Parameter gesuchte Text ist "Sales Value EUR", durchgesuchte Zeile ist beim ersten Lauf die Zeile 7, ... "
usw.
Now your turn.
VG
Yal
Anzeige
AW: letzten bestimmten Wert in Zeile finden
31.01.2023 10:35:28
Susanne
Guten Morgen Yal,
ab und zu brauch ich das, dass jemand den bösen Buben spielt ;)
Und wenn es oft nur die Zeile zu wechseln wäre xD
Bei deinem Code (hab ich übrigens nur leise vor mich hingesprochen, weil ich im Büro war hah) ist bei mir gleich ein ByRef-Fehler bei der Variable i aufgepoppt - aber das lag vielleicht am Excel 2013. Habe i als long definiert und nun geht es. DANKE!
Ich war in letzter Zeit sehr beschäftigt und bin jetzt erst dazugekommen, mich dem Projekt wieder zu widmen - verzeih mir, wenn sich das alles etwas zieht...
LG,Su
Vielen Dank für die Rückmeldung
31.01.2023 17:02:04
Yal
Super! Du hast es hinbekommen.
Ja, Variable, die an Sub als Parameter übergibt, sollte man immer typisieren. Mein Fehler.
VG
Yal
Anzeige
AW: letzten bestimmten Wert in Zeile finden
24.01.2023 18:53:06
GerdL
Ja klar, Susanne.
Deine letzten Sätze habe ich so verstanden. Nämlich dass keine Spalten einzufügen sind, wenn direkt rechts neben der letzten "SALES Value Euro"-Zelle
ein Wert steht.
Da sehe ich noch Erläuterungsbedarf.
Gruß Gerd
AW: letzten bestimmten Wert in Zeile finden
24.01.2023 19:14:26
Susanne
Tut mir leid, da habe ich mich wieder missverständlich ausgedrückt.
Es kommt ein paar Mal die Zelle mit dem Inhalt "Sales Value EUR" vor.
Hinter der letzten Zelle mit dem Inhalt "Sales Value EUR" (ganz rechts) sollen zwei Leerspalten eingefügt werden.
Löst man das Makro nochmal aus, sollen keine weiteren Spalten eingefügt werden, da ja schon zwei vorhanden sind.
Ursprünglich dachte ich, ich könnte mit .find von rechts suchen, aber das gibt es wohl nicht.
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige