Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1500to1504
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

Excel VBA: Nach mehreren Zellwerten suchen

Excel VBA: Nach mehreren Zellwerten suchen
04.07.2016 14:49:05
Moritz
Moinsen zusammen!
folgendes Problem. Ich habe ein Excel Arbeitsblatt und möchte mir jetzt Informationen per VBA aus einer anderen Tabelle ziehen,davon aber die ganze Reihe. Quelltabelle ist VBA, Suchtabelle ist Artikel. Hier mein Code:
-----------------------------------------------------------------------

Sub SearchandFind()
Dim rng As Range
Dim loWert As String
loWert =
Set rng = Worksheets("Artikelstamm").Range("A:A").Find(loDeinWert)
If rng Is Nothing Then
MsgBox "Wert " & loDeinWert & " nicht gefunden!"
Else
rng.EntireRow.Copy
Worksheets("VBA").Range("A1").PasteSpecial Paste:=xlPasteAll
End If
End Sub

---------------------------------------------------------------------------
Der Code soll alle Artikelnummern nehmen die in "VBA"/Spalte A stehen und diese in der Tabelle "Artikel" suchen, und die komplette Zeile wieder in Tabelle "VBA" reinkopieren.
Beim Zeile "loWert =" bin ich auf kein richtiges Ergebnis gekommen deswegen ist kein String angegeben.
Bitte um Hilfe!

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA: Nach mehreren Zellwerten suchen
04.07.2016 15:32:31
Herbert
Hallo Moritz,
helfen geht leichter, wenn Du eine Beispieldatei hochlädst.
Servus

AW: Excel VBA: Nach mehreren Zellwerten suchen
04.07.2016 16:17:05
Herbert
Hallo Moritz,
probiers mal damit:
Sub SearchandFind()
Dim rng As Range, loWert$, iLastRowVBA%, iLastRowART%, iCountVBA%, iCountART%
iLastRowVBA = Cells(Rows.Count, 1).End(xlUp).Row
iLastRowART = Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row
For iCountVBA = 2 To iLastRowVBA
For iCountART = 2 To iLastRowART
If Tabelle2.Range("A" & iCountART).Value = Range("A" & iCountVBA).Value Then
Range("B" & iCountVBA & ":D" & iCountVBA).Value = _
Tabelle2.Range("B" & iCountVBA & ":D" & iCountVBA).Value
End If
Next iCountART
Next iCountVBA
End Sub
Servus

Anzeige
AW: Excel VBA: Nach mehreren Zellwerten suchen
04.07.2016 16:22:16
Herbert
Hallo Moritz,
da hat sich doch glatt der "Fehlerdeifel" eingeschlichen! :o)=) So ist es nun korrekt:
Sub SearchandFind()
Dim rng As Range, loWert$, iLastRowVBA%, iLastRowART%, iCountVBA%, iCountART%
iLastRowVBA = Cells(Rows.Count, 1).End(xlUp).Row
iLastRowART = Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row
For iCountVBA = 2 To iLastRowVBA
For iCountART = 2 To iLastRowART
If Tabelle2.Range("A" & iCountART).Value = Range("A" & iCountVBA).Value Then
Range("B" & iCountVBA & ":D" & iCountVBA).Value = _
Tabelle2.Range("B" & iCountART & ":D" & iCountART).Value
End If
Next iCountART
Next iCountVBA
End Sub
Servus

Anzeige
AW: Excel VBA: Nach mehreren Zellwerten suchen
04.07.2016 16:31:21
Alex
Hi,
der Code von Herbert sieht gut aus - falls Deine "Suchliste" allerdings deutlich länger ist als in der Beispieldatei könnte es mit "Find" anstelle der zweiten Schleife deutlich schneller gehen:
Sub SearchAndFind()
Dim rng As Range, z As Range, suchErg As Range, Eingabe As Range
Dim loWert As String, wksVBA As Worksheet, wksArtikel As Worksheet
With ThisWorkbook
Set wksArtikel = .Worksheets("Artikel")
Set wksVBA = .Worksheets("VBA")
End With
Set rng = wksArtikel.UsedRange
Set Eingabe = wksVBA.Range("A2:A" & wksVBA.Cells(wksVBA.Rows.Count, 1).End(xlUp).Row)
For Each z In Eingabe
On Error Resume Next
Set suchErg = rng.Find(z.Value)
On Error GoTo 0
If Not suchErg Is Nothing Then
wksArtikel.Range(wksArtikel.Cells(suchErg.Row, 2), wksArtikel.Cells(suchErg.Row,  _
wksArtikel.Cells(suchErg.Row, Columns.Count).End(xlToRight).Column)).Copy
wksVBA.Cells(z.Row, 2).PasteSpecial xlPasteValues
'Else     (falls es "Nieten" geben kann)
'   wksVBA.Cells(z.Row, 2) = "DEINFEHLERTEXT"
End If
Next z
Set rng = Nothing
Set suchErg = Nothing
End Sub

Anzeige
AW: Excel VBA: Nach mehreren Zellwerten suchen
04.07.2016 21:37:20
Moritz
Vielen Dank an euch! Werde es morgen gleich mal testen und entsprechendes Feedback geben! :)

AW: Excel VBA: Nach mehreren Zellwerten suchen
04.07.2016 23:25:40
Moritz
Vielen Dank an euch! Werde es morgen gleich mal testen und entsprechendes Feedback geben! :)

AW: Excel VBA: Nach mehreren Zellwerten suchen
05.07.2016 06:55:36
Moritz
Vielen Dank an euch! Werde es morgen gleich mal testen und entsprechendes Feedback geben! :)

AW: Excel VBA: Nach mehreren Zellwerten suchen
05.07.2016 07:39:49
Moritz
Morgen!
Funktioniert noch nicht zu 100% wie ich mir das gedacht habe. Der Code darf nur eindeutige Werte finden da ich beispielsweise einen Artikel habe der so aussieht: "ABC2"und "B1-ABC2". Wie gebe ich im Code dann an das er genau die Werte ausgibt die ich im gegeben habe?
Danke im voraus!

Anzeige
AW: Excel VBA: Nach mehreren Zellwerten suchen
05.07.2016 09:00:26
Herbert
Dann lade halt mal eine Datei hoch, die auch wirklich realistische Werte beinhaltet, dann kann man Dir auch "wirklich" helfen!

AW: Excel VBA: Nach mehreren Zellwerten suchen
05.07.2016 10:05:53
Herbert
Hallo Moritz,
ich habe das Problem gefunden: Die "Find"-Methode funzt nicht, da sie nur nach der gesuchten Zeichenfolge sucht und den "-" ignoriert. Ich bastle Dir eine funktionierende Version in den nächsten Stunden! ;o)=)
Servus

AW: Excel VBA: Nach mehreren Zellwerten suchen
05.07.2016 10:25:40
Rudi
Hallo,
mein Ansatz:
Sub yyy()
Dim arrStamm, arrVBA
Dim i As Long, j As Long, k As Long
With Sheets("Artikelstamm")
arrStamm = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 5)
End With
With Sheets("VBA")
arrVBA = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
End With
ReDim Preserve arrVBA(1 To UBound(arrVBA), 1 To 5)
For i = 1 To UBound(arrVBA)
For j = 1 To UBound(arrStamm)
If arrStamm(j, 1) = arrVBA(i, 1) Then
For k = 2 To 5
arrVBA(i, k) = arrStamm(j, k)
Next k
End If
Next j
Next i
Sheets("vba").Cells(2, 1).Resize(UBound(arrVBA), UBound(arrVBA, 2)) = arrVBA
End Sub

Gruß
Rudi

Anzeige
AW: Excel VBA: Nach mehreren Zellwerten suchen
05.07.2016 10:31:08
Moritz
Hallo Rudi :)
Dein Code funktioniert bei mir!
Vielen Dank!

AW: Excel VBA: Nach mehreren Zellwerten suchen
05.07.2016 10:34:47
Herbert
Hallo Moritz,
klar funzt der Code von Rudi! Der ist ja auch ein VBA-Crack! Doch ich hätte mich gefreut, wenn er auf meine avisierte Lösung gewartet hätte. Die sieht nämlich ziemlich ähnlich aus. Schade! Aber es war ja nicht umsonst, denn so habe ich auch wieder etwas gelernt. Das kann ich sicher wieder mal gebrauchen.
Servus

doch ich hätte mich gefreut...
05.07.2016 11:00:55
Rudi
Hallo,
dann hier der Vollfrust.
Radikal beschleunigt. 10000 Stammdaten, 2200 Suchbegriffe. Laufzeit <0,1 Sek.
Sub yyy()
Dim arrStamm, arrVBA
Dim i As Long, j As Long, k As Long
Dim objStamm As Object
Set objStamm = CreateObject("scripting.dictionary")
With Sheets("Artikelstamm")
arrStamm = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 5)
End With
With Sheets("VBA")
arrVBA = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
End With
For i = 1 To UBound(arrStamm)
objStamm(arrStamm(i, 1)) = i + 1
Next i
ReDim Preserve arrVBA(1 To UBound(arrVBA), 1 To UBound(arrStamm, 2))
For i = 1 To UBound(arrVBA)
If objStamm.exists(arrVBA(i, 1)) Then
For k = 2 To UBound(arrStamm, 2)
arrVBA(i, k) = arrStamm(objStamm(arrVBA(i, 1)), k)
Next k
End If
Next i
Sheets("vba").Cells(2, 1).Resize(UBound(arrVBA), UBound(arrVBA, 2)) = arrVBA
End Sub
Noch mehr gelernt!
Gruß
Rudi

Anzeige
AW: doch ich hätte mich gefreut...
05.07.2016 11:02:22
Herbert
Echt geil!!! Super!!!
Servus

AW: doch ich hätte mich gefreut...
05.07.2016 11:08:29
Herbert
warum bockt der in dieser Zeile?
arrVBA(i, k) = arrStamm(objStamm(arrVBA(i, 1)), k)

Flüchtigkeitsfehler
05.07.2016 11:41:43
Rudi
Hallo,
+1 ist falsch !!!
  For i = 1 To UBound(arrStamm)
objStamm(arrStamm(i, 1)) = i
Next i
Gruß
Rudi

AW: Flüchtigkeitsfehler
05.07.2016 11:43:49
Herbert
Jetzt isser wieder ganzgeil! ;o)=)
Servus

AW: Flüchtigkeitsfehler
05.07.2016 11:47:20
Herbert
By the way! Hattet ihr nicht gesagt, dass ihr im Urlaub mal mit Euerem roten "Bomber" auch im Schwarzwald vorbei schaut? Da könntet ihr uns doch mal besuchen! Na, wie wärs?
Servus

Anzeige
Besuch
05.07.2016 12:31:44
Rudi
nö, kann nicht sein.
Im Sommer ist Meer Pflicht.
Allenfalls im Herbst.
Gruß
Rudi

AW: Besuch
05.07.2016 12:36:12
Herbert
Ja dann halt im Herbst! Falls ihr mal in die Nähe kommt, einfach melden!
Servus

AW: Excel VBA: Nach mehreren Zellwerten suchen
06.07.2016 11:43:54
Herbert
Hallo Moritz,
mein Code hält auch die Spalten flexibel! Ich ging davon aus, dass beide Tabellen die gleiche Spaltenanzahl aufweisen.
Sub SuchenUndFinden()
Dim iLastRowVBA%, iLastRowART%, iCountVBA%, iCountART%, iLastCol%, iColART%, arrText
Dim Eingabe As Range, wksVBA As Worksheet, wksART As Worksheet
Set wksVBA = Worksheets("VBA")
Set wksART = Worksheets("ARTIKEL")
Set Eingabe = wksVBA.Range("A2:A" & wksVBA.Cells(wksVBA.Rows.Count, 1).End(xlUp).Row)
iLastRowVBA = wksVBA.UsedRange.SpecialCells(xlCellTypeLastCell).Row
iLastRowART = wksART.UsedRange.SpecialCells(xlCellTypeLastCell).Row
iLastCol = wksVBA.UsedRange.SpecialCells(xlCellTypeLastCell).Column
arrText = Range(Cells(2, 2), Cells(iLastRowVBA, iLastCol))
For iCountVBA = 2 To iLastRowVBA
For iCountART = 1 To iLastRowART
If wksART.Range("A" & iCountART).Value = Range("A" & iCountVBA).Value Then
For iColART = 2 To iLastCol
arrText(iCountVBA - 1, iColART - 1) = wksART.Cells(iCountART, iColART).Value
Next iColART
End If
Next iCountART
Next iCountVBA
Range(Cells(2, 2), Cells(iLastRowVBA, iLastCol)).Value = arrText
End Sub
Servus
Anzeige

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige