Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Zeile ausgeben wo Wert das erste mal vorkommt

VBA: Zeile ausgeben wo Wert das erste mal vorkommt
24.03.2016 09:43:11
Pa
Hallo,
Ich suche einen VBA-Code der folgendes bewirkt:
In Spalte D stehen geordnet Kategorien (M1,M2,M3 usw.)
Die Zeile (z.B. Zeile 20) in der die Kategorie M2 zum ersten mal auftritt, soll unter der Variablen KatM abgespeichert werden ( Also: KatM = 20)
Wie würde ein solcher Code aussehen?
Gruß und Danke im Voraus!

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Zeile ausgeben wo Wert das erste mal vorkommt
24.03.2016 09:53:54
Werner
Hallo,
probier mal das hier - in einem allgemeinem Modul
Public Sub test1()
'## Suche Blatt1, SpalteD, Suchbegriff steht in Zelle A1, Suchrichtung von oben nach unten
'## Treffer nur, wenn exakt der Suchbegriff (alleine) in der Zelle in Spalte D steht
Dim KatM As Long
KatM = Sheets("Tabelle1").Columns(4).Find(what:=Range("A1").Value, LookIn:=xlValues, _
lookat:=xlWhole, searchdirection:=xlNext).Row
MsgBox "Fundstelle ist in Zeile " & KatM
End Sub
Gruß Werner

Anzeige
AW: VBA: Zeile ausgeben wo Wert das erste mal vorkommt
24.03.2016 10:00:32
Pa
Perfekt, es funktioniert. Vielen Dank!

AW: Update
24.03.2016 10:07:47
Werner
Hallo,
danke für die Rückmeldung. Hier noch ein kleines Update, hatte ich vergessen. Der Code läuft in einen Fehler wenn der Suchbegriff nicht gefunden wird. Hier jetzt noch mit Abfangen dieses Fehlers.
Public Sub test1()
'## Suche Blatt1, SpalteD, Suchbegriff steht in Zelle A1, Suchrichtung von oben nach unten
'## Treffer nur, wenn exakt der Suchbegriff (alleine) in der Zelle in Spalte D steht
Dim KatM As Long
On Error GoTo ausgang
KatM = Sheets("Tabelle1").Columns(4).Find(what:=Range("A1").Value, LookIn:=xlValues, _
lookat:=xlWhole, searchdirection:=xlNext).Row
MsgBox "Fundstelle ist in Zeile " & KatM
Exit Sub
ausgang:
MsgBox Range("A1") & " nicht gefunden."
End Sub
Gruß Werner

Anzeige
AW: Update
24.03.2016 11:53:04
Beverly
Hi Werner,
On Error ist hier nicht notwendig - definiere KatM as Range und benutze es wie folgt:
Public Sub test1()
'## Suche Blatt1, SpalteD, Suchbegriff steht in Zelle A1, Suchrichtung von oben nach unten
'## Treffer nur, wenn exakt der Suchbegriff (alleine) in der Zelle in Spalte D steht
Dim KatM As Range
Set KatM = Sheets("Tabelle1").Columns(4).Find(what:=Range("A1").Value, LookIn:=xlValues, _
lookat:=xlWhole, searchdirection:=xlNext)
If Not KatM Is Nothing Then
MsgBox "Fundstelle ist in Zeile " & KatM.Row
Else
MsgBox Range("A1") & " nicht gefunden."
End If
Set KatM = Nothing
End Sub


Anzeige
AW: Update
24.03.2016 11:58:11
Werner
Hallo Karin,
auch wieder wahr. Sicher die richtigere und vor allem elegantere Methode als on error..
Bin noch am Lernen aber gerade auch deshalb dankbar für derartige Hinweise.
Danke und viel Erfolg beim Eier suchen.
Gruß Werner

AW: VBA: Zeile ausgeben wo Wert das erste mal vorkommt
24.03.2016 09:56:31
Daniel
Hi
kannst du mit .FIND machen:
KatM = columns(4).Find(What:="M2", lookat:=xlwhole, lookIn:=xlvalues, searchdirection:=xlnext).Row

oder mit der Funktion VERGLEICH / MATCH:
KatM = Worksheetfunction.Match("M2", Columns(4), 0)
vorausgesetzt, M2 ist vorhanden.
wenn es vorkommen kann, dass M2 nicht vorhanden ist, müsste man noch etwas anders vorgehen um einen Fehlerabbruch zu vermeiden.
Gruß Daniel

Anzeige
AW: VBA: Zeile ausgeben wo Wert das erste mal vorkommt
24.03.2016 09:56:47
Beverly
Hi,
z.B. so:
Sub Test()
Dim KatM As Variant
KatM = Application.Match("M2", Columns(4), 0)
If Not IsError(KatM) Then
MsgBox KatM
Else
MsgBox "Nicht gefunden"
End If
End Sub


Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Zeile ausgeben wo Wert das erste Mal vorkommt


Schritt-für-Schritt-Anleitung

Um in Excel VBA die Zeile auszugeben, in der ein bestimmter Wert zum ersten Mal vorkommt, kannst du den folgenden VBA-Code verwenden. Dieser sucht in einer bestimmten Spalte (z.B. Spalte D) nach dem Wert, der in Zelle A1 steht.

  1. Öffne den VBA-Editor mit ALT + F11.
  2. Füge ein neues Modul hinzu.
  3. Kopiere und füge den folgenden Code ein:
Public Sub test1()
    ' Suche in Spalte D nach dem Wert in Zelle A1
    Dim KatM As Long
    On Error GoTo ausgang
    KatM = Sheets("Tabelle1").Columns(4).Find(what:=Range("A1").Value, LookIn:=xlValues, _
    lookat:=xlWhole, searchdirection:=xlNext).Row
    MsgBox "Fundstelle ist in Zeile " & KatM
    Exit Sub
ausgang:
    MsgBox Range("A1") & " nicht gefunden."
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus.

Dieser Code sucht in der Spalte D nach dem Wert aus Zelle A1 und gibt die Zeilennummer zurück, in der dieser Wert steht.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"

    • Ursache: Der gesuchte Wert existiert nicht in der angegebenen Spalte.
    • Lösung: Stelle sicher, dass der Wert, den du suchst, tatsächlich in der Spalte D vorhanden ist.
  • Fehler: "Typkonflikt"

    • Ursache: Eine falsche Datentypzuweisung.
    • Lösung: Überprüfe, ob die Variablen in deinem Code korrekt deklariert sind.

Alternative Methoden

Wenn du eine andere Methode bevorzugst, um den Wert zu finden, kannst du die Match-Funktion verwenden:

Sub Test()
    Dim KatM As Variant
    KatM = Application.Match("M2", Columns(4), 0)
    If Not IsError(KatM) Then
        MsgBox "Fundstelle ist in Zeile " & KatM
    Else
        MsgBox "Nicht gefunden"
    End If
End Sub

Dieser Code funktioniert ähnlich, sucht jedoch nach dem spezifischen Wert "M2" in der Spalte D.


Praktische Beispiele

  1. Beispiel 1: Wert in Zelle A1 suchen

    • Wenn du in Zelle A1 den Wert "M2" hast, wird die Zeilennummer zurückgegeben, in der "M2" zum ersten Mal in Spalte D erscheint.
  2. Beispiel 2: Wert in einer anderen Spalte suchen

    • Ändere die Columns(4) zu Columns(3), um in Spalte C nach dem Wert zu suchen.

Tipps für Profis

  • Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind.
  • Verwende With-Strukturen, um deinen Code klarer und effizienter zu gestalten, insbesondere bei mehrfachen Aufrufen eines Objekts.
With Sheets("Tabelle1").Columns(4)
    Set KatM = .Find(what:=Range("A1").Value, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext)
End With

FAQ: Häufige Fragen

1. Wie kann ich den gesuchten Wert anpassen? Du kannst den Wert in der Range("A1").Value-Zeile ändern. Trage den gewünschten Suchbegriff ein.

2. Was passiert, wenn der Wert nicht gefunden wird? Der Code gibt eine Nachricht aus, dass der gesuchte Wert nicht gefunden wurde, und es wird kein Fehler angezeigt.

3. Kann ich den Code auf andere Spalten anwenden? Ja, ändere einfach die Zahl in Columns(X) zu der Spalte, die du durchsuchen möchtest. X steht für die Spaltennummer.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige