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 Makro - 2 Tabellen vergleichen und Matches markieren

Frage Entwicklung VB for Applications

Mitglied: tommygun

tommygun (Level 1) - Jetzt verbinden

15.12.2008, aktualisiert 16.12.2008, 19520 Aufrufe, 5 Kommentare

der Code ist fertig, irgendwie fängt er sich leider in einer Endlosschleife

Hallo, ich habe eine .xls-Datei, die hat 2 Tabellenblätter.
Die Blätter sind hier in den Variablennamen schon drin also: Blatt_Bestandsdaten ist ein String (da liegt der Fehler also nicht ^^)
Anfangen soll der Vergleich ab Zeile 5 auf jedem Sheet
Und er vergleicht nur Spalte A aus Bestand mit Spalte A aus Abgang
wenn er was gleiches findet soll er den Wert aus dlgLBS.ComboBox1 in Spalte T aus Bestand schreiben

01.
   ' Abgänge mit Blatt Gesamtbestand vergleichen anhand Versicherungsnummer und einfügen des Quartals unter 'Abgang' 
02.
   ' nicht gefundene Versicherungsnummern werden in das Blatt "VNR nicht gefunden" kopiert 
03.
     For Zeile = 5 To Sheets(Blatt_Bestandsdaten).Range("A65536").End(xlUp).Row     ' Versicherungsnummer aus Bestandsdaten 
04.
     For Suchzeile = 5 To Sheets(Blatt_Abgang).Range("A65536").End(xlUp).Row        ' Versicherungsnummer aus Abgang 
05.
         If Sheets(Blatt_Abgang).Cells(Suchzeile, 1) = Sheets(Blatt_Bestandsdaten).Cells(Zeile, 1) Then 
06.
            Sheets(Blatt_Bestandsdaten).Cells(Zeile, 20) = dlgLBS.ComboBox1.Value 
07.
         End If 
08.
     Next Suchzeile 
09.
     Next Zeile
aber irgendwas stimmt jetzt nicht, er fängt sich in einer Endlosschleife.
Die Datensätze sind ca 15000 zu 3000 also nicht soviel...

Außerdem wenn das läuft, soll es die Werte aus Abgang, die nicht gefunden werden können in eine neue Tabelle einfügen.

Für Hilfe wäre ich sehr dankbar.
Mit freundlichen Grüßen tommy
Mitglied: StefanKittel
15.12.2008 um 01:19 Uhr
Hallo,

stell doch erstmal mit zwei Variablen sicher, dass die Beiden Fors einen gültigen Bereich haben.
Laut Deinen Zahlen muss Excel hier ca. 45.000.000 (15000*3000) Einträge vergleichen. Ist das richtig?
Excel ist nicht wirklich schnell!

Mach das ganze doch intelligenter.
Sortiere beide Tabellen (notfalls in einem anderen Bereich oder Blatt). Dann kanns Du beide viel effektiver (und auch schneller) vergleiche.

Deine Variante wäre Bubblesort. Meine Quicksort

Stefan
Bitte warten ..
Mitglied: Iwan
15.12.2008 um 12:02 Uhr
guten morgen,

um die Suche zu beschleunigen, würde ich die 3.000 Daten in den 15.000 suchen
wenn einer der 3.000 Sätze gefunden wurde, dann wird die Zelle (in beiden Tabellen?) grün markiert
wird es nicht gefunden, dann wird die Zelle rot markiert
(getestet mit Excel 2003 SP3, ncith schön aber funktioniert)
01.
Dim Blatt_Abgang As String, ZeilAb As String 
02.
Dim Blatt_Bestandsdaten As String, ZeilBe As String 
03.
Sub SuchenUndMarkieren() 
04.
ZeilAb = 4 
05.
Blatt_Abgang = "Tabelle1" 
06.
Blatt_Bestandsdaten = "Tabelle2" 
07.
 
08.
Start: 
09.
ZeilBe = 4 
10.
Sheets(Blatt_Abgang).Select 
11.
ZeilAb = ZeilAb + 1 
12.
Cells(ZeilAb, 1).Select 
13.
If Cells(ZeilAb, 1) = "" Then GoTo Ende 
14.
With Selection.Interior 
15.
    .ColorIndex = 3 
16.
End With 
17.
 
18.
Suchen: 
19.
ZeilBe = ZeilBe + 1 
20.
If Sheets(Blatt_Bestandsdaten).Cells(ZeilBe, 1) = "" Then GoTo Start 
21.
If Cells(ZeilAb, 1) = Sheets(Blatt_Bestandsdaten).Cells(ZeilBe, 1) Then 
22.
    With Selection.Interior 
23.
        .ColorIndex = 4 
24.
    End With 
25.
    GoTo Start 
26.
End If 
27.
GoTo Suchen 
28.
     
29.
Ende: 
30.
End Sub
Bitte warten ..
Mitglied: tommygun
15.12.2008 um 12:53 Uhr
Hallo, ich habe mich anfangs falsch ausgedrückt mit dem Markieren.
Ich habe den Code von dir Oliver getestet, er funktioniert, ist aber nicht schneller als meiner
Meiner funktioniert auch (nachdem ich den hab mal durchrasseln lassen, was 3 Minuten gedauert hat)
Aber jetzt steh ich vor folgendem Problem:
01.
     Blatt_VNR_NA = "VNR nicht gefunden" 
02.
     Dim i As Long 
03.
     i = Sheets(Blatt_VNR_NA).Range("A65536").End(xlUp).Row + 1 
04.
     For Zeile = 5 To Sheets(Blatt_Bestandsdaten).Range("A65536").End(xlUp).Row        ' Versicherungsnummer aus Bestandsdaten 
05.
        For Suchzeile = 5 To Sheets(Blatt_Abgang).Range("A65536").End(xlUp).Row        ' Versicherungsnummer aus Abgang 
06.
            If Sheets(Blatt_Abgang).Cells(Suchzeile, 1) = Sheets(Blatt_Bestandsdaten).Cells(Zeile, 1) Then 
07.
               Sheets(Blatt_Bestandsdaten).Cells(Zeile, 20) = dlgLBS.ComboBox1.Value                        ' Quartal eintragen 
08.
               Sheets(Blatt_Bestandsdaten).Cells(Zeile, 18) = Sheets(Blatt_Abgang).Cells(Suchzeile, 7)      ' Endbeitrag Ab eintragen 
09.
            Else 
10.
               Sheets(Blatt_VNR_NA).Cells(i, 1) = Sheets(Blatt_Abgang).Cells(Suchzeile, 1)                  ' VNR eintragen 
11.
               Sheets(Blatt_VNR_NA).Cells(i, 2) = Sheets(Blatt_Abgang).Cells(Suchzeile, 7)                  ' Endbeitrag Ab eintragen 
12.
               Sheets(Blatt_VNR_NA).Cells(i, 3) = dlgLBS.ComboBox1.Value                                    ' Quartal eintragen 
13.
               i = i + 1 
14.
            End If 
15.
        Next Suchzeile 
16.
     Next Zeile
ich möchte das die Einträge aus Abgängen (3000) in die Blatt_VNR_NA übernommen werden, die nicht in den 15000 auftauchen
er macht mir mit dem Code, den ich hier gepostet habe aber totalen Mist, er schreibt in Blatt_VNR_NA viel zuviele Einträge.
Ich denke das liegt an meinen falschen Einträgen, was i angeht, das muss sicher irgendwie anders in die For-Schleifen gebastelt werden, ich hab aber keine Ahnung wohin.
i soll außerdem die erste freie Zeile in Blatt_VNR_NA sein, da der hier genannte Code mit jedem Quartal ausgeführt wird, also mehrmals, ich denke, das passt aber soweit

Bitte helft mir irgendwie das i noch richtig zu verstauen, so dass er das macht, was er soll
Bitte warten ..
Mitglied: tommygun
16.12.2008 um 19:44 Uhr
Falls es noch jemanden nach mir interessiert, oder es jemand als Anreiz braucht, ich habe das Problem gelöst und zwar wie folgt:
01.
   ' Abgänge mit Blatt Gesamtbestand vergleichen anhand Versicherungsnummer und einfügen des Quartals unter 'Abgang' 
02.
   ' nicht gefundene Versicherungsnummern werden in das Blatt "VNR nicht gefunden" kopiert 
03.
     Blatt_VNR_NA = "VNR nicht gefunden" 
04.
     Dim i As Long 
05.
     Dim pruef As Integer 
06.
     i = Sheets(Blatt_VNR_NA).Range("A65536").End(xlUp).Row + 1 
07.
     For Zeile = 5 To Sheets(Blatt_Abgang).Range("A65536").End(xlUp).Row                                    ' Versicherungsnummer aus Abgang 
08.
        pruef = 0 
09.
        For Suchzeile = 5 To Sheets(Blatt_Bestandsdaten).Range("A65536").End(xlUp).Row                      ' Versicherungsnummer aus Bestandsdaten 
10.
            If Sheets(Blatt_Abgang).Cells(Zeile, 1) = Sheets(Blatt_Bestandsdaten).Cells(Suchzeile, 1) Then 
11.
               Sheets(Blatt_Bestandsdaten).Cells(Zeile, 20) = dlgLBS.ComboBox1.Value                        ' Quartal eintragen 
12.
               Sheets(Blatt_Bestandsdaten).Cells(Zeile, 18) = Sheets(Blatt_Abgang).Cells(Zeile, 7)          ' Endbeitrag Ab eintragen 
13.
               pruef = 1 
14.
            End If 
15.
        Next Suchzeile 
16.
        If pruef = 0 Then 
17.
           Sheets(Blatt_VNR_NA).Cells(i, 1) = Sheets(Blatt_Abgang).Cells(Zeile, 1)                          ' VNR eintragen 
18.
           Sheets(Blatt_VNR_NA).Cells(i, 2) = Sheets(Blatt_Abgang).Cells(Zeile, 7)                          ' Endbeitrag Ab eintragen 
19.
           Sheets(Blatt_VNR_NA).Cells(i, 3) = dlgLBS.ComboBox1.Value                                        ' Quartal eintragen 
20.
           i = i + 1 
21.
        End If 
22.
     Next Zeile
Ist mir heute morgen direkt nach dem Aufstehen eingefallen.
Vielen Dank für die Ideen und die Hilfe,
mit freundlichem Gruß
tommy
Bitte warten ..
Mitglied: cicero
04.04.2009 um 18:19 Uhr
Moin,

habe ein ähnliches Problem dass ich per Makro lösen möchte. Kann mir einer von euch den kompletten Quelltext zur verfügung stellen?

Danke!

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

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Microsoft Office
Excel 2010 - Zwei Tabellen vergleichen (Zugriffsprüfung) (2)

Frage von d4shoerncheN zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel-Makro (7)

Frage von yuki13 zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel Makro : Erst prüfen bei erfolgreicher IF einen Wert überschreiben (4)

Frage von Matze1508 zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel Makro - Button "Springe zu Zeile mit heutigem Datum" (5)

Frage von hannsgmaulwurf zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

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

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...