Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Durchsuchen einer Spalte nach Variable, wenn gefunden, kopiere Zeile

Frage Microsoft Microsoft Office

Mitglied: arndttob

arndttob (Level 1) - Jetzt verbinden

16.03.2010 um 11:03 Uhr, 12174 Aufrufe, 14 Kommentare

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
Mitglied: 76109
16.03.2010 um 13:40 Uhr
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:
01.
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
Bitte warten ..
Mitglied: arndttob
16.03.2010 um 14:57 Uhr
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
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
Bitte warten ..
Mitglied: 76109
16.03.2010 um 16:03 Uhr
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
Bitte warten ..
Mitglied: arndttob
16.03.2010 um 16:08 Uhr
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
Bitte warten ..
Mitglied: 76109
16.03.2010 um 16:43 Uhr
Hallo Tobi!

Hier mal ein Code zum Testen. Dieselmal sogar entgegen meiner Gewohnheit auch mal auskommentiert
01.
Option Explicit 
02.
Option Compare Text 
03.
 
04.
Const SheetHome = "Abgleich"    'Suchwerte Tabellenname 
05.
Const RangeHome = "B2:B"        'Suchwerte Zell-Teilbereich 
06.
Const SpalteHome = "B"          'Suchwerte Spalte 
07.
 
08.
Const SheetFind = "LOP"         'Suchen in Tabellenname 
09.
Const SpalteFind = "K"          'Suchen in Spalte 
10.
 
11.
Const Err1 = "Der vorgebene Zahlenbereich ist unzulässig!" 
12.
 
13.
Sub SearchAndCopy() 
14.
 
15.
    Dim Wks As Worksheet, c As Range, Found As Range, EndLine As Long, Von As Integer, Bis As Integer 
16.
     
17.
   'Abfrage-Boxen für Werte Von und Bis (Type 1 = Integer) 
18.
    Von = Application.InputBox("Bitte den Zahlenbereich [Von] angeben:", "Suchen Von", 1, Type:=1) 
19.
    Bis = Application.InputBox("Bitte den Zahlenbereich [Bis] angeben:", "Suchen Bis", 1, Type:=1) 
20.
     
21.
   'Prüfen auf Wert 0 (Abbrechen) und Prüfen Wert Von größer Bis 
22.
    If Von <= 0 Or Bis <= 0 Or Von > Bis Then MsgBox Err1, vbExclamation, "Fehler": Exit Sub 
23.
     
24.
   'Tabelle Abgleich aktivieren 
25.
    Sheets(SheetHome).Activate 
26.
     
27.
   'Tabelle "LOP" als Alias Wks festlegen 
28.
    Set Wks = Sheets(SheetFind) 
29.
     
30.
   'Letzte Zeile in Tabelle Abgleich Spalte B ermitteln 
31.
    EndLine = Cells(Rows.Count, SpalteHome).End(xlUp).Row 
32.
     
33.
   'Alle Zell-Objecte (c=Range) in Tabelle Abgleich Spalte B durchlaufen 
34.
    For Each c In Range(RangeHome & EndLine) 
35.
        
36.
       'Prüfen ob Zellinhalte im Bereich Von und Bis liegt 
37.
        If c >= Von And c <= Bis Then 
38.
            
39.
           'Wenn ja, dann in Tabelle "LOP" in Spalte K den Wert suchen 
40.
            Set Found = Wks.Columns(SpalteFind).Find(c, LookIn:=xlValues, LookAt:=xlWhole) 
41.
            
42.
           'Prüfen ob der Wert gefunden wurde 
43.
            If Not Found Is Nothing Then 
44.
                
45.
               'Wenn ja, dann in der Found-Zeile (Found=Range) Spalte A-G kopieren und in Tabelle Abgleich 
46.
               'Spalte O in aktueller Zeile einfügen 
47.
                Range(Wks.Cells(Found.Row, "A"), Wks.Cells(Found.Row, "G")).copy Destination:=Cells(c.Row, "O") 
48.
            End If 
49.
        End If 
50.
    
51.
   'Nächste Zelle bis Letzte Zelle erreicht ist 
52.
    Next 
53.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: Biber
16.03.2010 um 16:51 Uhr
[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]
Bitte warten ..
Mitglied: 76109
16.03.2010 um 17:00 Uhr
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)
Bitte warten ..
Mitglied: Biber
16.03.2010 um 17:08 Uhr
[OT ii]
Moin didi1954
(Alzheimer und es wird von Tag zu Tag schlimmer)
Denk einfach nicht dran...
[/OT ii]
Bitte warten ..
Mitglied: bastla
16.03.2010 um 17:15 Uhr
@76109
[auch OT]
(Alzheimer und es wird von Tag zu Tag schlimmer)
Woher weißt Du das?
[/auch OT]

Dein Code schaut jedenfalls nicht "zum Vergessen" aus ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
16.03.2010 um 18:08 Uhr
@bastla

[OT i++]
Zitat von bastla:
> (Alzheimer und es wird von Tag zu Tag schlimmer)
Woher weißt Du das?
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
Bitte warten ..
Mitglied: arndttob
16.03.2010 um 18:09 Uhr
wow 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 ^^
werds morgen gleich mal testen.

vielen Dank!
Bitte warten ..
Mitglied: 76109
16.03.2010 um 18:15 Uhr
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
Am besten erstmal garnix sagen und erstmal testen
und auch so viel zum lernen dabei ^^
Ja, auf jedenfall weißt Du jetzt schon mal, wie man einen Code Formgerecht auskommentiert
vielen Dank!
Yepp gern geschehen

Gruß Dieter
Bitte warten ..
Mitglied: arndttob
17.03.2010 um 12:49 Uhr
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

Grüße
Tobi
Bitte warten ..
Mitglied: 76109
17.03.2010 um 18:11 Uhr
Hallo Tobi!

Freut mich, dass es funktioniert

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...