Durchsuchen einer Spalte nach Variable, wenn gefunden, kopiere Zeile
Hi Community,
ich habe wiedermal ein Excel/VBA Problem bei dem ich ratlos bin, hoffe Ihr könnt mir helfen.
Wäre super!
da ich leider nicht wirklich bewandert bin was Excel/VBA betrifft, brauch ich wieder Hilfe.
Habe mich zwar schon selbst versucht, doch leider erfolglos.
Folgendes Problem:
ich möchte mit diesem Makro bewirken
- Werte (zB. 1000-5000) aus Sheet Abgleich, Spalte B sollen mit Werten (0-9999) aus Sheet LOP, Spalte K verglichen werden
- wenns eine Übereinstimmung gibt (zB. 3456), soll die Zeile des Wertes 3456 vom Sheet LOP nach Abgleich kopiert werden
Allerdings gibt er mir bei der Zeile "Sheets(SheetNamen).Range("O:U").Paste" einen Laufzeitfehler aus.
Ich hoffe Ihr könnt mir helfen. Ich weiss leider nicht mehr weiter
Option Explicit
Option Compare Text
Const SheetNamen = "Abgleich"
Const SuchSpalte = "B"
Const Suchtext = "LOP!K:K"
Sub copy()
Dim Text As Variant, Found As Boolean, i As Long, EndLine As Long, s As Integer
Sheets(SheetNamen).Activate
EndLine = Cells(Rows.Count, "A").End(xlUp).Row
Text = Split(Suchtext, ",")
For i = 1 To EndLine
If i > EndLine Then Exit For
Found = False
For s = 0 To UBound(Text)
If Cells(i, SuchSpalte) Like Trim(Text(s)) Then Found = True: Sheets("LOP").Range("A" & i & ":G" & i).Select
Selection.copy
Sheets(SheetNamen).Range("O:U").Paste Hier gibt er mir einen Laufzeitfehler aus
Next
If Found = False Then Exit For
Next
'
End Sub
Hoffe Ihr könnt mir helfen.
Vielen Dank im Vorraus.
Liebe Grüße
Tobi
ich habe wiedermal ein Excel/VBA Problem bei dem ich ratlos bin, hoffe Ihr könnt mir helfen.
Wäre super!
da ich leider nicht wirklich bewandert bin was Excel/VBA betrifft, brauch ich wieder Hilfe.
Habe mich zwar schon selbst versucht, doch leider erfolglos.
Folgendes Problem:
ich möchte mit diesem Makro bewirken
- Werte (zB. 1000-5000) aus Sheet Abgleich, Spalte B sollen mit Werten (0-9999) aus Sheet LOP, Spalte K verglichen werden
- wenns eine Übereinstimmung gibt (zB. 3456), soll die Zeile des Wertes 3456 vom Sheet LOP nach Abgleich kopiert werden
Allerdings gibt er mir bei der Zeile "Sheets(SheetNamen).Range("O:U").Paste" einen Laufzeitfehler aus.
Ich hoffe Ihr könnt mir helfen. Ich weiss leider nicht mehr weiter
Option Explicit
Option Compare Text
Const SheetNamen = "Abgleich"
Const SuchSpalte = "B"
Const Suchtext = "LOP!K:K"
Sub copy()
Dim Text As Variant, Found As Boolean, i As Long, EndLine As Long, s As Integer
Sheets(SheetNamen).Activate
EndLine = Cells(Rows.Count, "A").End(xlUp).Row
Text = Split(Suchtext, ",")
For i = 1 To EndLine
If i > EndLine Then Exit For
Found = False
For s = 0 To UBound(Text)
If Cells(i, SuchSpalte) Like Trim(Text(s)) Then Found = True: Sheets("LOP").Range("A" & i & ":G" & i).Select
Selection.copy
Sheets(SheetNamen).Range("O:U").Paste Hier gibt er mir einen Laufzeitfehler aus
Next
If Found = False Then Exit For
Next
'
End Sub
Hoffe Ihr könnt mir helfen.
Vielen Dank im Vorraus.
Liebe Grüße
Tobi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 138342
Url: https://administrator.de/contentid/138342
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo arndttob!
Du kannst/darfst für Paste nur eine Zell-Adresse angeben z.B. Selection.Copy Range("A1:G1"), ...Range("O1").Paste
Du kannst es aber auch so machen:
Gruß Dieter
PS. Wenn ich das so auf den ersten Blick richtig sehe, dann hast Du Dir den Code irgendwie zusammenkopiert. Die Zeile mit "If i > EndLine Then Exit For" macht hier z.B. überhaupt keinen Sinn, sondern nur, wenn Zeilen gelöscht werden und sich dadurch die Letzte Zeile (EndLine) nach oben verschiebt. Und so auf den zweiten Blick, passt eigentlich garnichts zusammen
Du kannst/darfst für Paste nur eine Zell-Adresse angeben z.B. Selection.Copy Range("A1:G1"), ...Range("O1").Paste
Du kannst es aber auch so machen:
Sheets("LOP").Range("A" & i & ":G" & i).Copy destination:=Sheets(SheetNamen).Cells(i, "O")
Gruß Dieter
PS. Wenn ich das so auf den ersten Blick richtig sehe, dann hast Du Dir den Code irgendwie zusammenkopiert. Die Zeile mit "If i > EndLine Then Exit For" macht hier z.B. überhaupt keinen Sinn, sondern nur, wenn Zeilen gelöscht werden und sich dadurch die Letzte Zeile (EndLine) nach oben verschiebt. Und so auf den zweiten Blick, passt eigentlich garnichts zusammen
Hallo Tobi!
Aja, kam mir doch gleich irgendwie bekannt vor
Und das es nicht funktioniert ist mir schon klar.
Habe ich das jetzt richtig verstanden, dass Du in der Tabelle "Abgleich" Spalte B eine Zahlenreihe hast und einen bestimmten Zahlenbereich mit Von und Bis vorgibst und innerhalb dieses Zahlenbereichs die Tabelle "LOP" Spalte K nach Übereinstimmung durchsuchen und wenn gefunden, dann die besagten Werte von Spalte A-G kopieren und in der Tabelle "Abgleich" ab Spalte O einfügen willst?
Gruß Dieter
Aja, kam mir doch gleich irgendwie bekannt vor
Und das es nicht funktioniert ist mir schon klar.
Habe ich das jetzt richtig verstanden, dass Du in der Tabelle "Abgleich" Spalte B eine Zahlenreihe hast und einen bestimmten Zahlenbereich mit Von und Bis vorgibst und innerhalb dieses Zahlenbereichs die Tabelle "LOP" Spalte K nach Übereinstimmung durchsuchen und wenn gefunden, dann die besagten Werte von Spalte A-G kopieren und in der Tabelle "Abgleich" ab Spalte O einfügen willst?
Gruß Dieter
Hallo Tobi!
Hier mal ein Code zum Testen. Dieselmal sogar entgegen meiner Gewohnheit auch mal auskommentiert
Gruß Dieter
Hier mal ein Code zum Testen. Dieselmal sogar entgegen meiner Gewohnheit auch mal auskommentiert
Option Explicit
Option Compare Text
Const SheetHome = "Abgleich" 'Suchwerte Tabellenname
Const RangeHome = "B2:B" 'Suchwerte Zell-Teilbereich
Const SpalteHome = "B" 'Suchwerte Spalte
Const SheetFind = "LOP" 'Suchen in Tabellenname
Const SpalteFind = "K" 'Suchen in Spalte
Const Err1 = "Der vorgebene Zahlenbereich ist unzulässig!"
Sub SearchAndCopy()
Dim Wks As Worksheet, c As Range, Found As Range, EndLine As Long, Von As Integer, Bis As Integer
'Abfrage-Boxen für Werte Von und Bis (Type 1 = Integer)
Von = Application.InputBox("Bitte den Zahlenbereich [Von] angeben:", "Suchen Von", 1, Type:=1)
Bis = Application.InputBox("Bitte den Zahlenbereich [Bis] angeben:", "Suchen Bis", 1, Type:=1)
'Prüfen auf Wert 0 (Abbrechen) und Prüfen Wert Von größer Bis
If Von <= 0 Or Bis <= 0 Or Von > Bis Then MsgBox Err1, vbExclamation, "Fehler": Exit Sub
'Tabelle Abgleich aktivieren
Sheets(SheetHome).Activate
'Tabelle "LOP" als Alias Wks festlegen
Set Wks = Sheets(SheetFind)
'Letzte Zeile in Tabelle Abgleich Spalte B ermitteln
EndLine = Cells(Rows.Count, SpalteHome).End(xlUp).Row
'Alle Zell-Objecte (c=Range) in Tabelle Abgleich Spalte B durchlaufen
For Each c In Range(RangeHome & EndLine)
'Prüfen ob Zellinhalte im Bereich Von und Bis liegt
If c >= Von And c <= Bis Then
'Wenn ja, dann in Tabelle "LOP" in Spalte K den Wert suchen
Set Found = Wks.Columns(SpalteFind).Find(c, LookIn:=xlValues, LookAt:=xlWhole)
'Prüfen ob der Wert gefunden wurde
If Not Found Is Nothing Then
'Wenn ja, dann in der Found-Zeile (Found=Range) Spalte A-G kopieren und in Tabelle Abgleich
'Spalte O in aktueller Zeile einfügen
Range(Wks.Cells(Found.Row, "A"), Wks.Cells(Found.Row, "G")).copy Destination:=Cells(c.Row, "O")
End If
End If
'Nächste Zelle bis Letzte Zelle erreicht ist
Next
End Sub
Gruß Dieter
[OT]
Moin didi1954,
Richtig wie ein les- und wartbarer Code....
Danke!
wer oder was dich auch immer auf diese Idee gebracht hat
Grüße
Biber
[/OT]
Moin didi1954,
Dieselmal sogar entgegen meiner Gewohnheit auch mal auskommentiert
Dafür, dass es nicht deinen Gewohnheiten entspricht, sieht es aber total routiniert und vorbildlich aus.Richtig wie ein les- und wartbarer Code....
Danke!
wer oder was dich auch immer auf diese Idee gebracht hat
Grüße
Biber
[/OT]
Hallo Biber!
[OT]
Ich hab's gewusst und extra noch überlegt, ob ich noch eine Anmerkung für Dich mit einfügen soll
[/OT]
Gruß Dieter
PS. Wer mich auf die Idee gebracht hat? Das habe ich irgendwie vergessen (Alzheimer und es wird von Tag zu Tag schlimmer)
[OT]
Ich hab's gewusst und extra noch überlegt, ob ich noch eine Anmerkung für Dich mit einfügen soll
[/OT]
Gruß Dieter
PS. Wer mich auf die Idee gebracht hat? Das habe ich irgendwie vergessen (Alzheimer und es wird von Tag zu Tag schlimmer)
@bastla
[OT i++]
Na, das merk ich z.B. wenn ich auf's Klo gehe und mir dann erst wieder einfällt, dass ich mir doch eigentlich einen Kaffee holen wollte. Oder wenn ich vor'm Geldautomaten stehe und die PIN-Nummer eingeben soll, die mir dann auch tatsächlich für einen Bruchtteil einer Sekunde gerade entfallen ist
[/OT i++]
Gruß Dieter
[OT i++]
Na, das merk ich z.B. wenn ich auf's Klo gehe und mir dann erst wieder einfällt, dass ich mir doch eigentlich einen Kaffee holen wollte. Oder wenn ich vor'm Geldautomaten stehe und die PIN-Nummer eingeben soll, die mir dann auch tatsächlich für einen Bruchtteil einer Sekunde gerade entfallen ist
Dein Code schaut jedenfalls nicht "zum Vergessen" aus ...
Ja, ich finde auch, dass es mit Kommantaren garnicht mal so schlecht aussieht, wenn auch vom Code nicht mehr so viel zu sehen ist[/OT i++]
Gruß Dieter
Hallo Tobi!
Gruß Dieter
Zitat von @arndttob:
wow ich weiss ganich was ich sagen soll,
vielen vielen Dank, dass du dir so viel Zeit für mich nimmst
Am besten erstmal garnix sagen und erstmal testenwow ich weiss ganich was ich sagen soll,
vielen vielen Dank, dass du dir so viel Zeit für mich nimmst
und auch so viel zum lernen dabei ^^
Ja, auf jedenfall weißt Du jetzt schon mal, wie man einen Code Formgerecht auskommentiertvielen Dank!
Yepp gern geschehenGruß Dieter
Hallo Tobi!
Freut mich, dass es funktioniert
Gruß Dieter
Freut mich, dass es funktioniert
Gruß Dieter