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

Excel VBA gefilterte Spalten vergleichen

Frage Entwicklung VB for Applications

Mitglied: YotYot

YotYot (Level 1) - Jetzt verbinden

10.12.2014, aktualisiert 11.12.2014, 2711 Aufrufe, 3 Kommentare, 1 Danke

Aloha!

Ich bin seit satten fünf Stunden auf der Suche nach einer funktionierenden Lösung und scheitere daran, dass ich nicht in der Lage bin, fehlerhafte Makros, die ohne Erklärung kommen, zu korrigieren. Nebenbei brennt mir natürlich die Zeit, ist klar... Excel ist eben nicht Access, die Anforderungen ändern sich gerade

Die Ausgangssituation:
Ich habe eine Excel-Tabelle mit zwei Tabellenblättern, "links" und "rechts". Interessant sind die Spalten links.H und rechts.B. Auf beiden Tabellenblättern befinden sich Datensätze aus unterschiedlichen Quellen, die sich also voneinander unterscheiden, die aber in den genannten Spalten teilweise eine Schnittmenge haben. In links.H können die Werte öfter vorkommen, in rechts.B sind die Werte nur einmal vorhanden. Nun ist die Tabelle "links" auch noch gefiltert, d.h., von gut 1200 Datensätzen werden nach Filterung nur vielleicht 70 angezeigt, auch hier gibt es in links.H doppelte Werte. "rechts" ist nicht gefiltert. Beide Tabellen sind unterschiedlich sortiert.

Die Aufgabe:
Ich will links.H mit rechts.B vergleichen und überall da, wo in rechts.B ein Wert auftaucht, der auch in links.H enthalten ist, den Wert aus rechts.A, also der daneben liegenden Zelle kopieren und in die Zelle(n) links.P einfügen, wo in der entsprechenden Zeile ebenfalls der gefundene Wert steht. Um das ein wenig zu verdeutlichen:

Zeile links.H rechts.A rechts.B
17 45789 b1n2m3 41254
44 45795 j433k43 39877
99 41254 k4l5553 29544
100 41254 l9m666 33998
119 43777 a55f99 45789


In Zeile 99 und 100 steht in links.H also ein Wert, der in rechts.B in Zeile 17 auftaucht. Jetzt soll rechts.A.Zeile17 kopiert werden nach Links.P.Zeilen99 und 100.

Alle Scripts, die ich bisher getestet habe, funktionieren entweder gar nicht oder liefern mir falsche Werte zurück, die nicht stimmen oder schreiben sie in falsche Felder. Sogar die Vorab-Version, dass ich nur die gefundenen Zellen farblich markiere, funktioniert nicht richtig, es werden falsche Zellen eingefärbt, teilweise sogar leere zellen (unterhalb der eigentlichen Tabelle, wenn ich mit der gesamten Spalte arbeite).

Wie macht man sowas? Verschachtelte For each Schleifen, ok, aber irgendwie klappt das zählen nicht richtig...

Kann mir da mal jemand 'nen Zaunpfahl leihen?

Grüße

Y.
Mitglied: colinardo
LÖSUNG 10.12.2014, aktualisiert 11.12.2014
Aloha! Pehea `oe YotYot?
kein Problem, den Zaunpfahl ramm ich dir doch gleich ganz ins Gehirn ... es ließe sich zwar auch mit einer einfachen Formel lösen, da du aber so wie es aussieht nach einem Makro suchst, hier die entsprechende Lösung für dein Anliegen:
In Zeile 4 und 6 legst du noch die Namen der Worksheets fest, feddich. Die Zeilen sind alle kommentiert, so dass eine Anpassung nichts im Wege stehen sollte. Ich bin jetzt einfach mal davon ausgegangen das in den Sheets jeweils die erste Zeile eine Überschrift beinhaltet, und die Daten ab Zeile 2 beginnen.

Hier auch noch das Demo-Sheet map_values_257257.xlsm
01.
Sub FindAndSetValues() 
02.
    Dim wsLinks As Worksheet, wsRechts As Worksheet, rngSearch As Range, rngRef As Range, cell As Range, firstAddress As String, f As Range 
03.
    'linkes Sheet festlegen 
04.
    Set wsLinks = Sheets("links") 
05.
    'rechtes Sheet festlegen 
06.
    Set wsRechts = Sheets("rechts") 
07.
    'Bereich in dem im linken Sheet gesucht wird (nur sichtbare Zellen werden verarbeitet, ausgefilterte nicht) 
08.
    Set rngSearch = wsLinks.Range("H2:H" & wsLinks.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible) 
09.
    'Bereich der Referenz-Werte im rechten Sheet 
10.
    Set rngRef = wsRechts.Range("B2:B" & wsRechts.UsedRange.Rows.Count) 
11.
     
12.
    'Für jede Zelle im Bereich der Referenz-Werte 
13.
    For Each cell In rngRef 
14.
        'wenn Zellwert nicht leer ist ... 
15.
        If cell.Value <> "" Then 
16.
            'Suche Wert der Zelle im linken Sheet 
17.
            Set f = rngSearch.Find(cell.Value, LookIn:=xlValues, Lookat:=xlWhole) 
18.
            If Not f Is Nothing Then 
19.
                firstAddress = f.Address 
20.
                Do 
21.
                    'setze Wert im linken Sheet Spalte P auf den Wert von Sheet Rechts Spalte A 
22.
                    f.Offset(0, 8).Value = cell.Offset(0, -1).Value 
23.
                    'Alternativ könntest du die obige Zeile auch so schreiben dann ist es für dich vielleicht verständlicher 
24.
                    'wsLinks.Range("P" & f.Row).Value = wsRechts.Range("A" & cell.Row).Value 
25.
                     
26.
                    'Suche ob der Wert erneut vorkommt 
27.
                    Set f = rngSearch.FindNext(f) 
28.
                Loop While Not f Is Nothing And f.Address <> firstAddress 
29.
            End If 
30.
        End If 
31.
    Next 
32.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: YotYot
11.12.2014 um 09:41 Uhr
Man muss halt nur jemanden fragen, der sich auskennt

Hallo Uwe!

Das war jetzt mal fast unbezahlbar... wenn ich mir überlege, wie viele nicht funktionierende Scripts ich gestestet habe und was ich versucht habe, umzuschreiben mit dem Wissen aus Access und Javascript - aber Excel VBA ist halt doch noch mal 'ne andere Sprache: xlValues, xlWohle usw sind für mich halt noch neu, da muss ich mich noch einfinden.

Läuft. Fehlerfrei. Gleich vom ersten Versuch an. Und außerdem wesentlich schneller, als das, was ich gestern getestet habe. Bin begeistert! Danke!

Und ja, ich wollte es unbedingt in VBA haben, erstens weil ich mich da einarbeiten will, weil es in Zukunft öfter mal Anforderungen in der Richtung geben kann und zweitens sind in den kopierten Zellen IDs drin, die ich zum Erstellen von Weblinks noch weiterverarbeiten muss. Macht dann ja Sinn, wenn alles in einem Guß ist. Außerdem kann man dann bei Bedarf noch ein wenig mehr damit anstellen.

Nochmal: Danke, bin voll begeistert!

Y.

Achso: was heißt eigentlich "Pehea `oe"? Bin soweit gekommen, dass es wohl sowas wie "Was ist", also "Was heißt" vermutlich bedeutet? Yot (Jott) ist der erste Buchstabe meines Namens.

Grüße aus Bremen,

Jörg
Bitte warten ..
Mitglied: colinardo
11.12.2014 um 09:59 Uhr
Hallo Joerg,
ich dachte wenn schon auf Hawaiianisch begrüßt muss ich doch Kante zeigen
Achso: was heißt eigentlich "Pehea `oe"?
>>"Hallo, wie geht's dir ?"<<

Viel Erfolg beim VBAen
Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
gelöst Excel VBA Werte von 2 verschiedenen Sheets vergleichen und aktualisieren (4)

Frage von drimrim zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Microsoft Office
Excel VBA: Tranferieren von Werten aus Quelldatei in die Masterdatei mit SVERWEIS (3)

Frage von peter.schroeder zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...