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

VBA vergleichen Tabelle

Frage Entwicklung VB for Applications

Mitglied: Saiks1989

Saiks1989 (Level 1) - Jetzt verbinden

21.02.2009, aktualisiert 21:40 Uhr, 5044 Aufrufe, 13 Kommentare

Hallo Leute,

ich möchte folgendes erreichen:

Es gibt 2 Tabellen, in der einen Tabelle wird nach der Reihe der Wert aus Spalte "A" mit den Werten aus der Tabelle aus der Spalte "B" verglichen. Die Werte in der 2 Tabelle sind nicht gleich angeordnet wie die in der ersten. Wenn der Wert aus A gefunden wurde soll ein Wert der in der 1. Tabelle in Spalte C steht, in die 2. Tabelle in die Spalte G kopiert/eingefügt werden.
Wäre sowas möglich?! Hab mir schon die Zähe daran ausgebissen.

Hier mein Anfang, der einige Fehler enthält. Es ist auch vielleicht ein komplett falscher Ansatz.

Code:

Sub x()


Dim Zelle As Range
Dim sBeg As String
Dim selc
Dim i As Integer

Do Until i = 50
i = i + 1
sBeg = Tabelle3.Range("A" & i)
selc = Tabelle2.Range("B2:B65536")
selc.Select
If Zelle = sBeg And Tabelle3.Range("E" & i) <> "D" Then
Zelle.Select

Selection.Copy
Sheets("Zusammenfasssung").Select
Range("G" & i).Select
ActiveSheet.Paste
End If
Loop

End Sub
Mitglied: bastla
21.02.2009 um 22:01 Uhr
Hallo Saiks1989 und willkommen im Forum!

Ist das so gemeint, dass, wenn der Wert aus zB A2 auch in der Spalte B zumindest einmal vorkommt, der Wert aus C2 in die Spalte G der zweiten Tabelle eingefügt werden soll?

Dann etwa so:
01.
Sub Zusammenfassen() 
02.
Quelltabelle = "Tabelle1" 
03.
Quellspalte = "C" 
04.
Quellzeile = 2 'Quelldaten ab dieser Zeile 
05.
Kriterienspalte = "A" 
06.
Set Suchbereich = Worksheets(Quelltabelle).Range("B:B") 
07.
 
08.
Zieltabelle = "Tabelle2" 
09.
Zielspalte = "G" 
10.
Zielzeile = 2 'Eintragung ab dieser Zeile 
11.
 
12.
With Worksheets(Quelltabelle) 
13.
    Kriterium = .Cells(Quellzeile, Kriterienspalte) 
14.
    Do While Kriterium <> "" 
15.
        If Not Suchbereich.Find(Kriterium, LookIn:=xlValues) Is Nothing Then 
16.
            Worksheets(Zieltabelle).Cells(Zielzeile, Zielspalte).Value = .Cells(Quellzeile, Quellspalte).Value 
17.
            Zielzeile = Zielzeile + 1 
18.
        End If 
19.
        Quellzeile = Quellzeile + 1 
20.
        Kriterium = .Cells(Quellzeile, Kriterienspalte) 
21.
    Loop 
22.
End With 
23.
End Sub
Grüße
bastla

P.S.: Für die Formatierung von Code siehe hier ...
Bitte warten ..
Mitglied: wiesi200
21.02.2009 um 22:02 Uhr
wie währ's mit einer einfachen abfrage in access?
Bitte warten ..
Mitglied: Saiks1989
22.02.2009 um 17:08 Uhr
Es ist wichtig, dass es mit excel abläuft..
Bitte warten ..
Mitglied: Saiks1989
22.02.2009 um 19:02 Uhr
Nicht ganz. Der Suchbereich befindet sich in der 2. Tabelle. Wenn der Suchwert in der 2 Tabelle gefunden wird soll der Wert genau in die selbe Zeile neben den Suchbereich.
Bitte warten ..
Mitglied: bastla
22.02.2009 um 19:45 Uhr
Hallo Saiks1989!

Wenn der Wert in der selben Zeile neben den Suchbereich (Tabelle2, Spalte B) stehen soll, dann verwende doch einfach die folgende Formel und kopiere diese nach unten:
=WENN(ISTFEHLER(SVERWEIS(B2;Tabelle1!$A$1:$C$50;3;0));"";SVERWEIS(B2;Tabelle1!$A$1:$C$50;3;0))
Falls das Ganze allerdings anders gemeint war, dann stelle bitte die Inhalte der relevanten Spalten aus den beiden Tabellen einmal etwas genauer dar ...

Grüße
bastla
Bitte warten ..
Mitglied: Saiks1989
22.02.2009 um 20:26 Uhr
Das einfachste ist, wenn ich irgendwie mittels vba die Zeilennummer rausfinden kann in der der gesuchte wert drin steht.
Bitte warten ..
Mitglied: bastla
22.02.2009 um 20:42 Uhr
Hallo Saiks1989!

Na dann eben folgende Variation der Schleifenteiles:
01.
With Worksheets(Quelltabelle) 
02.
    Kriterium = .Cells(Quellzeile, Kriterienspalte) 
03.
    Do While Kriterium <> "" 
04.
        Set F = Suchbereich.Find(Kriterium, LookIn:=xlValues) 
05.
        If Not F Is Nothing Then 
06.
            Zeile = F.Row 
07.
08.
            ' weitere Befehle 
09.
10.
        End If 
11.
        Quellzeile = Quellzeile + 1 
12.
        Kriterium = .Cells(Quellzeile, Kriterienspalte) 
13.
    Loop 
14.
End With
Grüße
bastla
Bitte warten ..
Mitglied: Saiks1989
23.02.2009 um 13:10 Uhr
So das klappt nun auch super danke.. Jetz möchte ich es gern etwas abgewandelt haben und zwar sollen nach zwei Kriterien gesucht werden.
Erst wenn diese in der gleichen Zeile gefunden werden soll der Wert in die andere Tabelle übertragen werden. Ich hab es auch schon versucht, aber
es kommt immer ein Fehler:

Sub Zusammenfassen()
Dim Spalte

Quellzeile = 2 'Quelldaten ab dieser Zeile


Set Suchbereich = Worksheets("intern").Range("B:B")
Set Suchbereich1 = Worksheets("intern").Range("C:C")


With Worksheets("Zusammenfassung")
Kriterium = Tabelle3.Range("A" & Quellzeile)
Kriterium1 = Tabelle3.Range("D" & Quellzeile)
Do While Kriterium <> ""




Set F = Suchbereich.Find(Kriterium, LookIn:=xlValues)
Set G = Suchbereich1.Find(Kriterium1, LookIn:=xlValues)

Zeile1 = G.Row

Zeile = F.Row

If Zeile1 = Zeile Then
Tabelle3.Range("G" & Quellzeile) = Worksheets("intern").Range("D" & Zeile)
End If

If Tabelle3.Range("E" & Quellzeile) = "D" Then
Tabelle3.Range("G" & Quellzeile) = ""
End If

Quellzeile = Quellzeile + 1
Kriterium = Tabelle3.Range("A" & Quellzeile)
Loop
End With
End Sub
Bitte warten ..
Mitglied: bastla
23.02.2009 um 13:36 Uhr
Hallo Saiks1989!

Lässt sich
es kommt immer ein Fehler:
etwas konkretisieren?

Vorweg vielleicht gleich ein Hinweis auf eine Zeile der Art
If Not F Is Nothing Then
- damit wird der Fall abgefangen, dass die Suche erfolglos war ...

Grüße
bastla
Bitte warten ..
Mitglied: Saiks1989
23.02.2009 um 15:10 Uhr
Laufzeitfehler \'91\'.

Objektvariable oder With-Blockvariable nicht festgelegt

Das ist die Fehlermeldung.
Bitte warten ..
Mitglied: bastla
24.02.2009 um 21:34 Uhr
Hallo Saiks1989!

Und für welche Zeile wird der Fehler angezeigt (wo landest Du, wenn Du "Debuggen" wählst)?

Um zumindest die Hälfte der Meldung ausschließen zu können, kannst Du die "With"- und "End With"-Zeile aus Deinem Coden entfernen - Du verwendest deren Funktionalität ohnehin nicht.

Ansonsten nochmals der Hinweis darauf, dass der Rückgabewert für das Suchergebnis (das Objekt F bzw G) auch Nothing sein kann und dies vor dem Versuch, mit F.Row bzw G.Row die Zeile der Fundstelle zu erhalten, geprüft werden sollte.

Grüße
bastla
Bitte warten ..
Mitglied: Saiks1989
25.02.2009 um 08:31 Uhr
Hallo bastla!

Ich hab nun hab nun With und End with entfernt! Es kommt kein Fehler wenn ich das mit nothing machen, aber es kommen dann auch keine Ergbnisse.
Der Debugger springt auf diese Zeile: "Zeile1 = G.Row".

Es soll einfach das selbe wie vorher gemacht werden nur es muss zwei Kriterien in einer Zeile sein. Es wenn diese zwei Kritieren in der anderen Tabelle gefunden werden soll der Wert übertragen werden...
Bitte warten ..
Mitglied: bastla
25.02.2009 um 10:59 Uhr
Hallo Saiks1989!

Poste doch bitte nochmals den aktuellen Stand Deines Scripts (und verwende dafür Code-Formatierung).

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

Microsoft Office
EXCEL VBA Termindaten aus Tabelle Filtern

Frage von t3jxbus zum Thema Microsoft Office ...

VB for Applications
gelöst Excel VBA .csv Import in Tabelle x, ab Spalte y

Frage von drimrim zum Thema VB for Applications ...

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

Frage von drimrim zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (29)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...