Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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
Inhaltsverzeichnis

Suchen von Werten in zwei Spalten

Suchen von Werten in zwei Spalten
21.07.2022 07:04:13
Werten
Guten Morgen,
ich hoffe mir kann jemand auf die Sprünge helfen.
Ich habe zwei Werte und möchte diese in zwei Spalten suchen, wobei es eine Zeile gibt, welche beide gesuchten Werte enthält.
Diese Zeile möchte ich für die weitere Bearbeitung gerne ermitteln.
Gesucht werden Suchwert 1 in Spalte B und Suchwert 2 in Spalte G auf dem gleichen Tabellenblatt.
Ich habe im Netz folgenden Code gefunden und wollte diesen gerne anpassen:

Dim rng As Range, LRow As Long, r As Long, ze As Variant, sw1 As Variant, sw2 As Variant, fnd As Boolean
sw1 = .Cells(Zeile, ARTIKELNR).Value
sw2 = .Cells(Zeile, KUNDENNR).Value
With wks3
Set rng = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp)) '.Offset(0, -1))
r = Application.WorksheetFunction.CountIf(rng, sw1)
For LRow = 1 To r
ze = Application.Match(sw1, rng, 0)
If IsNumeric(ze) Then
r = IIf(LRow = 1, ze, r + ze)
If .Cells(r, 2) = sw2 Then
.Select
.Cells(r, 3).Select
fnd = True
Exit For
Else
Set rng = .Range(rng.Offset(ze, 0), rng(rng.Cells.Count))
ze = Application.Match(sw1, rng, 0)
End If
End If
Next LRow
End With
If fnd = False Then MsgBox "wurde nicht gefunden!"
End If
Leider kann ich nicht weiter testen was passiert, da bereits in dieser Zeile

ze = Application.Match(sw1, rng, 0)
ein Fehler 2042 auftritt und die Suche damit nicht richtig funktioniert.
Hat vielleicht jemand die Möglichkeit mir eine Lösung für die Ursache zu nennen oder zu sagen, was ich ändern muss?
Ich wäre wirklich sehr dankbar, da es mir einiges erleichtern würde.

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen von Werten in zwei Spalten
21.07.2022 08:40:42
Werten
Hallo,
so ein Codeschnippsel wirft ofmals mehr Fragen auf als die Fragestellung selbst. Hier wäre eine Beispielmappe hilfreich.
Grüße
AW: Suchen von Werten in zwei Spalten
21.07.2022 09:39:52
Werten
Hallo!
du weißt aber, dass der Bezug für sw schon ungültig ist, oder?

sw1 = .Cells(Zeile, ARTIKELNR).Value
sw2 = .Cells(Zeile, KUNDENNR).Value
With wks3
Gruß, MCO
Sorry, auf falschen Beitrag geantwortet
21.07.2022 09:41:00
MCO

  • AW: Sorry, auf falschen Beitrag geantwortet
    21.07.2022 10:47:19
    Unknown_User
    Hi,
    sorry, hatte nur einen Teil des Codes gezeigt, da ich dachte, zwei Spalten nach zwei Werten zu suchen, wobei eine Zeile existiert, die beide Werte beinhaltet, ist etwas was ggf. häufiger gefragt wird...
    Ich habe Deinen Hinweis aber aufgegriffen. In der nun angehängten Tabelle habe ich jetzt nur das Tabellenblatt und eine angepasste Sub in Modul 1 mit Beispiel-Suchwert. Nun kann ich die Zeile ermitteln (bzw. aktuell wird noch eine Zelle markiert), aber nur, wenn der Suchbegriff nicht in Anführungszeichen ist.
    Ich ziehe aber die Suchbegriffe später aus Zellenwerten eines anderen Tabellenblatts und da werden diese in Anführungszeichen in einer variablen übergeben.
    Dann wird mir auch wieder der Fehler 2042 angezeigt.
    https://www.herber.de/bbs/user/154281.xlsm
    Wie bekomme ich diese Anführungszeichen weg, bzw. was müsste ich anders deklarieren?
    Läuft:
    
    Private Sub Testsub()
    Dim rng As Range, LRow As Long, r As Long, ze As Variant, sw1 As Variant, sw2 As Variant, fnd As Boolean, wks3 As Worksheet
    Set wks3 = ThisWorkbook.Worksheets("Stammdt1")
    sw1 = 56412022
    sw2 = 51712
    With wks3
    Set rng = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp)) '.Offset(0, -1))
    r = Application.WorksheetFunction.CountIf(rng, sw1)
    For LRow = 1 To r
    ze = Application.Match(sw1, rng, 0)
    If IsNumeric(ze) Then
    r = IIf(LRow = 1, ze, r + ze)
    If .Cells(r, 7) = sw2 Then
    .Select
    .Cells(r, 7).Select
    fnd = True
    Exit For
    Else
    Set rng = .Range(rng.Offset(ze, 0), rng(rng.Cells.Count))
    ze = Application.Match(sw1, rng, 0)
    End If
    End If
    Next LRow
    End With
    If fnd = False Then MsgBox "wurde nicht gefunden!"
    End Sub
    
    Läuft nicht (so wurden die Werte in meinem vorherigen Beispiel übergeben:
    
    Private Sub Testsub()
    Dim rng As Range, LRow As Long, r As Long, ze As Variant, sw1 As Variant, sw2 As Variant, fnd As Boolean, wks3 As Worksheet
    Set wks3 = ThisWorkbook.Worksheets("Stammdt1")
    sw1 = "56412022"
    sw2 = "51712"
    With wks3
    Set rng = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp)) '.Offset(0, -1))
    r = Application.WorksheetFunction.CountIf(rng, sw1)
    For LRow = 1 To r
    ze = Application.Match(sw1, rng, 0)
    If IsNumeric(ze) Then
    r = IIf(LRow = 1, ze, r + ze)
    If .Cells(r, 7) = sw2 Then
    .Select
    .Cells(r, 7).Select
    fnd = True
    Exit For
    Else
    Set rng = .Range(rng.Offset(ze, 0), rng(rng.Cells.Count))
    ze = Application.Match(sw1, rng, 0)
    End If
    End If
    Next LRow
    End With
    If fnd = False Then MsgBox "wurde nicht gefunden!"
    End Sub
    

    Anzeige
    Zu kompliziert gedacht
    21.07.2022 13:12:34
    MCO
    Hallo!
    Ich hab es mal auf die Grundfunktion runtergebrochen: Zahlen suchen, Kombination vergleichen.
    Hochzählen und vergleichen mit "kein Text" enfällt durch .specialcells.
    Solltest du dennoch die Zeilen eingrenzen müssen, kannst du die Range (B:B) ja anpassen.
    Der Code sieht jetzt so aus:(hoffentlich verständlich)
    
    Private Sub Testsub()
    Dim rng As Range, LRow As Long, r As Long, ze As Variant, sw1 As Variant, sw2 As Variant, fnd As Boolean, wks3 As Worksheet
    Dim num As Range
    Set wks3 = ThisWorkbook.Worksheets("Stammdt1")
    sw1 = 56412022
    sw2 = 51712
    Set rng = wks3.Range("B:B").SpecialCells(xlConstants, xlNumbers)
    For Each num In rng
    If num = sw1 And Cells(num.Row, "G") = sw2 Then
    wks3.Rows(num.Row).Select
    'Exit For
    Exit Sub
    End If
    Next num
    MsgBox sw1 & " in Kombination mit " & sw2 & " wurde nicht gefunden!", vbCritical + vbOKOnly
    End Sub 
    
    Viel Erfolg!
    Gruß, MCO
    Anzeige
    AW: Zu kompliziert gedacht
    21.07.2022 15:36:47
    Unknown_User
    Vielen herzlichen Dank. Das ist genau was ich suche und viel weniger Code ist es auch noch.
    AW: Zu kompliziert gedacht
    22.07.2022 07:06:41
    Unknown_User
    Hi,
    ich war zu schnell. Leider funktioniert es nicht. Er findet nie ein Match. Ich habe auch Werte vorgegeben, z. B. sw1 = "56410019" und sw2 = "50704"
    Das Match ist in Zeile 39, aber er sucht munter weiter. Ich komme immer zur MsgBox, dass keine Übereinstimmung gefunden wurde.
    Woran liegt das?
    AW: Zu kompliziert gedacht
    22.07.2022 08:25:32
    PawelPopolski
    Ich tippe einfach mal darauf, dass die Werte in Spalte B keine Zahlen sind. Wenn das so ist, mach einfach mal aus
    Set rng = .Range("B:B").SpecialCells(xlConstants, xlNumbers)
    das hier
    Set rng = .Range("B:B").SpecialCells(xlConstants)
    Anzeige
    AW: Zu kompliziert gedacht
    22.07.2022 11:53:42
    Unknown_User
    Also ich habe den Code geändert. Tatsächlich sind in Spalte B nicht immer Zahlen. Dennoch wird kein Match gefunden.
    Wenn ich mir die Überwachung der Werte ansehe, müsste es passen:
    Userbild
    Allerdings ist der Wert num nicht in Anführungsstrichen und der Wert sw2 schon. Ob das Einfluss hat?
    AW: Zu kompliziert gedacht
    22.07.2022 13:27:27
    PawelPopolski
    Schau mal in die Spalte Typ deines Screenshots. Da steht Variant/String. Ja, das hat Einfluss, wenn du nach einem Text suchst, der als Zahl in deiner Zelle steht.
    AW: Zu kompliziert gedacht
    22.07.2022 13:31:52
    Unknown_User
    Danke, aber das war auch ein Denkfehler von mir scheinbar. Die Suchwerte sind beide in Anführungsstrichen, num ist eine Range.
    Habe es ja hinbekommen, hatte ein Punkt gefehlt...
    Anzeige
    AW: Zu kompliziert gedacht
    22.07.2022 15:59:10
    Unknown_User
    Ok,
    ich muss den anderen Vorschlag probieren. Habe den Code nun in meine Original-Tabelle übertragen und trotz Match wird wieder auf die MsgBox verwiesen.
    Userbild
    Der Code scheint so einfach aber irgendwo ist der Wurm drin. Match wäre Zeile 42 gewesen.
    AW: Zu kompliziert gedacht
    22.07.2022 12:40:17
    Unknown_User
    Ok, ich habe es gefunden....
    
    num = sw1 And .Cells(num.Row, "G") = sw2
    
    da fehlte der Punkt bei Cells...
    Habe es in die Select Methode geändert, kommt ja aufs gleiche raus:
    
        With wks3
    Set rng = wks3.Range("B4:B50").SpecialCells(xlConstants)
    For Each num In rng
    Select Case True
    Case num = sw1 And .Cells(num.Row, "G") = sw2
    .Activate
    .Rows(num.Row).Select
    Exit For
    Exit Sub
    End Select
    Next num
    MsgBox sw1 & " in Kombination mit " & sw2 & " wurde nicht gefunden!", vbCritical + vbOKOnly
    

    Anzeige
    AW: Suchen von Werten in zwei Spalten
    22.07.2022 13:34:40
    Werten
    Hi
    am einfachsten so:
    
    dim arrB, arrG
    dim z as long
    arrB = ActiveSheet.Usedrange.Columns(2)
    arrG = ActiveSheet.Usedrange.Columns(7)
    for z = 1 to ubound(arrB, 1)
    if arrB(z, 1) = Suchwert1 Then
    if arrG(z, 1) = Suchwert2 Then
    hier der Code, der bei einem Treffer ausgeführt werden soll, z ist die Zeilennummer der jeweiligen Zeile
    Exit for
    end if
    end if
    Next
    if z > ubound(arrB, 1) then Msgbox "kein Treffer"
    
    Gruß Daniel

    AW: Suchen von Werten in zwei Spalten
    22.07.2022 13:39:58
    Werten
    Hi,
    wow. Jetzt habe ich zwei Lösungen, wobei die Lösung von PawelPopolski super funktioniert.
    Danke für die Mühe!
    Anzeige

    315 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige