arndttob
Goto Top

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

Content-ID: 138342

Url: https://administrator.de/contentid/138342

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

76109
76109 16.03.2010 um 13:40:10 Uhr
Goto Top
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:
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 zusammenface-wink
arndttob
arndttob 16.03.2010 um 14:57:00 Uhr
Goto Top
Hi Didi,

danke für deine Hilfe.

ja ich muss dir leider Recht geben, ich habe alles zusammengewürfelt, da ich mit selbst schreiben noch nicht so weit bin face-confused
Ich habe mir dein Script, welches du mir vor ca. 1 Woche gegeben hattest als Vorlage verwendet.

Mit der Zeile von dir, habe ich es nun auch ausprobiert. es gibt keinen Fehler und auch keine Ausgabe.
Ich glaub da liegt noch ein weiter Weg vor mir ^^

Danke&Gruß
Tobi
76109
76109 16.03.2010 um 16:03:06 Uhr
Goto Top
Hallo Tobi!

Aja, kam mir doch gleich irgendwie bekannt vorface-wink

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
arndttob
arndttob 16.03.2010 um 16:08:27 Uhr
Goto Top
Hi Dieter,

ja genau so hatte ich es vor, aber ich komme einfach nicht drauf.
Werd mir mal etwas Lektüre besorgen, damit ich auch hier etwas fit werde. :P

Vielen Dank für die Hilfe
Gruß
Tobi
76109
76109 16.03.2010 um 16:43:22 Uhr
Goto Top
Hallo Tobi!

Hier mal ein Code zum Testen. Dieselmal sogar entgegen meiner Gewohnheit auch mal auskommentiertface-wink
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
Biber
Biber 16.03.2010 um 16:51:47 Uhr
Goto Top
[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 face-wink

Grüße
Biber
[/OT]
76109
76109 16.03.2010 um 17:00:21 Uhr
Goto Top
Hallo Biber!

[OT]
Ich hab's gewusstface-wink und extra noch überlegt, ob ich noch eine Anmerkung für Dich mit einfügen sollface-smile
[/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)face-wink
Biber
Biber 16.03.2010 um 17:08:54 Uhr
Goto Top
[OT ii]
Moin didi1954
(Alzheimer und es wird von Tag zu Tag schlimmer)
Denk einfach nicht dran...
[/OT ii]
bastla
bastla 16.03.2010 um 17:15:12 Uhr
Goto Top
@76109
[auch OT]
(Alzheimer und es wird von Tag zu Tag schlimmer)face-wink
Woher weißt Du das? face-wink
[/auch OT]

Dein Code schaut jedenfalls nicht "zum Vergessen" aus ... face-smile

Grüße
bastla
76109
76109 16.03.2010 um 18:08:21 Uhr
Goto Top
@bastla

[OT i++]
Zitat von @bastla:
> (Alzheimer und es wird von Tag zu Tag schlimmer)face-wink
Woher weißt Du das? face-wink
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 istface-smile

Dein Code schaut jedenfalls nicht "zum Vergessen" aus ... face-smile
Ja, ich finde auch, dass es mit Kommantaren garnicht mal so schlecht aussieht, wenn auch vom Code nicht mehr so viel zu sehen istface-wink
[/OT i++]

Gruß Dieter
arndttob
arndttob 16.03.2010 um 18:09:17 Uhr
Goto Top
wow ich weiss ganich was ich sagen soll,
vielen vielen Dank, dass du dir so viel Zeit für mich nimmst face-smile

und auch so viel zum lernen dabei ^^
werds morgen gleich mal testen.

vielen Dank!
76109
76109 16.03.2010 um 18:15:00 Uhr
Goto Top
Hallo Tobi!

Zitat von @arndttob:
wow ich weiss ganich was ich sagen soll,
vielen vielen Dank, dass du dir so viel Zeit für mich nimmst face-smile
Am besten erstmal garnix sagen und erstmal testenface-wink
und auch so viel zum lernen dabei ^^
Ja, auf jedenfall weißt Du jetzt schon mal, wie man einen Code Formgerecht auskommentiertface-smile
vielen Dank!
Yepp gern geschehenface-wink

Gruß Dieter
arndttob
arndttob 17.03.2010 um 12:49:01 Uhr
Goto Top
Hi Dieter,

habe es nun testen können.
Funktioniert alles wie am Schnürchen.

Nun brauch ich mich nicht mehr durch die Tabellen wühlen, ewig rumkopieren und sortieren.

Vielen vielen Dank nochmal für deine Hilfe, du hast mir sehr geholfen face-smile

Grüße
Tobi
76109
76109 17.03.2010 um 18:11:07 Uhr
Goto Top
Hallo Tobi!

Freut mich, dass es funktioniertface-wink

Gruß Dieter