MS-Excel - DRINGEND!

elektron

New member
Hallo Leute,

kann ein Problem leider nicht lösen
und es wird zeitlich eng,
vielleicht kann mir jemand helfen.

Ich habe zwei Sheets:

1.
Spalte 1 Spalte 2
Name Vorname

2.
Spalte 1 Spalte 2 Spalte 3
Name Vorname KID

Die KID muss zuverlässig in Sheet 1
übertragen werden.

Es handelt sich um etwa 4.000 User :eek:


Dankeschön im Voraus!
 
Ich weiss nicht, ob ich Dein Problem richtig verstanden habe, aber warum kopierst Du nicht einfach die Spalte "KID" und fügst diese im ersten Sheet wieder ein? :confused:
 
Falls das mit dem kopieren nicht zuverlässig funktioniert, würd ich das mit nem einfachen VBA-Skript machen, das einfach alles Anträge durchgeht, Vor- und Nachnamen vergleicht und bei Übereinstimmung die KID überträgt.
 
Mach zuerst ne Sicherheitskopie. Dann mach eine Schaltfläche mit der "Steuerelemente-Toolbox". Im Code kannst du dann etwa folgendes eintippen.

Allg. Tabelle1 und Tabelle 2 durch die Namen der richtigen Tabellen ersetzen.

Dim i As Integer, j As Integer
Dim Vorname As String, Nachname As String, Erfolg As Boolean

For i = 1 To 4000 ' Die erste Zahl durch die erste Reihe mit Datensätzen in Tabelle 1 ersetzen, die zweite durch die letze Reihe.

Nachname = Tabelle1.Cells(i, 1) ' 1 ersetzen durch die Spalte, in der der Nachname vorkommt
Vorname = Tabelle1.Cells(i, 2) ' 2 ersetzen durch die Spalte, in der der Vorname vorkommt

Erfolg = False
For j = 1 To 4000' Die erste Zahl durch die erste Reihe mit Datensätzen in Tabelle 2 ersetzen, die zweite durch die letze Reihe.
If Tabelle2.Cells(j, 1) = Nachname And Tabelle2.Cells(j, 2) = Vorname Then ' 1 ersetzen durch die Spalte, in der der Nachname vorkommt 2 ersetzen durch die Spalte, in der der Vorname vorkommt
Tabelle1.Cells(i, 3) = Tabelle2.Cells(j, 3) ' 3 ersetzen durch die Spalte, in der die KID steht, bzw. stehen soll.
Erfolg = True
Exit For
End If
Next j

If Erfolg = False Then
Tabelle1.Cells(i, 3) = "XXXX"' 3 ersetzen durch die Spalte, in der die KID steht, bzw. stehen soll.
End If
DoEvents
Next i

------------------------------------------------------------------

Lacht mich nicht für diesen Code aus :) Ich weiss, dass ich nicht coden kann. Aber ich versuche zu helfen... :D Kann für die 4000 Datensätze recht lange dauern. Kannst es zwecks besserer Stabilität vielleicht "step by step" machen. Bei

For i = 1 To 4000

vielleicht zuerst von 1 bis 500, dann von 501 bis 1000, etc..

Gruss
Poly
 
Man könnte die Performance von diesem Skript verbessern, indem man die Datensätze der 2. Tabelle alle einmal ausliest und dann mit dem Array arbeitet. Denn v.A. das auslesen der Daten dauert in Excel lange.

Man könnte auch den Punkt, an dem man Anfängt zu vergleichen optimieren, falls beispielsweise die Daten einigermassen alphabetisch sind. :confused:
 
Yep, läuft deutlich schneller. Aber auch schwieriger anzupassen.







Dim i As Integer, j As Integer
Dim Vorname As String, Nachname As String, Erfolg As Boolean
Dim Tab2(4000, 3) As String

' Auslesen der Tabelle 2
For i = 1 To 4000 'Reichen der Tabelle 2
For j = 1 To 3 'Spalten der Tabelle 2
Tab2(i, j) = Tabelle2.Cells(i, j)
Next j
Next i

For i = 1 To 4000 ' Die erste Zahl durch die erste Reihe mit Datensätzen in Tabelle 1 ersetzen, die zweite durch die letze Reihe.

Nachname = Tabelle1.Cells(i, 1) ' 1 ersetzen durch die Spalte, in der der Nachname vorkommt
Vorname = Tabelle1.Cells(i, 2) ' 2 ersetzen durch die Spalte, in der der Vorname vorkommt

Erfolg = False
For j = 1 To 4000 ' Die erste Zahl durch die erste Reihe mit Datensätzen in Tabelle 2 ersetzen, die zweite durch die letze Reihe.
If Tab2(j, 1) = Nachname And Tab2(j, 2) = Vorname Then ' 1 ersetzen durch die Spalte, in der der Nachname vorkommt 2 ersetzen durch die Spalte, in der der Vorname vorkommt
Tabelle1.Cells(i, 3) = Tab2(j, 3) ' 3 ersetzen durch die Spalte, in der die KID steht, bzw. stehen soll.
Erfolg = True
Exit For
End If
Next j

If Erfolg = False Then
Tabelle1.Cells(i, 3) = "XXXX" ' 3 ersetzen durch die Spalte, in der die KID steht, bzw. stehen soll.
End If
DoEvents
Next i
 
Probier ich nachher mal aus.
Ich kann die Spalte nicht kopieren,
weil nicht alle User in beiden Sheets
gleich vorhanden sind.

Ersteinmal vielen Dank!
 
OK, einen Fehler habe ich gefunden.
Die Spalten habe ich nicht numeriert,
sondern alphabetisiert.

Jetzt sagt er aber "Typen unverträglich" :eek:
 
Nach einigen kleineren Schwierigkeiten :rolleyes:
habe ich es dann doch noch hinbekommen... :cool:

Vielen Dank nochmal!

PS: Geschwindigkeit über Array ~ 3-4 Sekunden :eek:
 
Zurück
Oben