Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1500to1504
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

vba Code vergleicht zwei Zellen lange Laufzeit

vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 14:05:58
Daum
Hallo zusammen,
ich habe folgendes Problem habe mir einen Code zusammengebastelt welcher die Zellen der Spalte B aus einer Tabelle mit den Zellen aus Spalte B einer anderen Tabelle (Materialstammliste) vergleicht und wenn es einen Treffer gibt soll es aus der Tabelle Materialstammliste die dazugehörigen Werte in Tabelle 1 kopieren.
So weit so gut es Funktioniert auch tadellos allerdings läuft er nach dem er die letzten daten kopiert hat noch sehr lange weiter.
Theoretisch müsste er aufhören sobald in Tabelle 1 der letzte Wert verglichen und kopiert worden ist.
Hier der Code:
Sub Artikel_aus_Materialstammliste_übernehmen()
'Materialstammliste öffnen
Workbooks.Open Filename:="T:\Materialstammliste.xls"
'Variable als Ganzzahlig definiert
Dim i As Integer
Dim i2 As Integer
'i von 5 bis (Benutze Felder zählen)
For i = 5 To Workbooks(1).Worksheets("deutsch").UsedRange.Rows.Count
For i2 = 6 To Workbooks("Materialstammliste").Worksheets("Artikelnummern").UsedRange.Rows.Count
'Vergleich der Spalte B von SL mit Mat.stammliste
If Workbooks(1).Worksheets("deutsch").Range("B" & i) = Workbooks("Materialstammliste"). _
Worksheets("Artikelnummern").Range("B" & i2) Then
'Wenn Zelle Leer mache nichts
If Workbooks(1).Worksheets("deutsch").Range("B" & i) = "" Then
i = i
'Wenn Zelle Voll kopiere in SL
Else
Workbooks("Materialstammliste").Worksheets("Artikelnummern").Range("C" & i2). _
Select
Selection.Copy
Workbooks(1).Worksheets("deutsch").Range("C" & i).PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False
Workbooks("Materialstammliste").Worksheets("Artikelnummern").Range("E" & i2, "L" _
& i2).Select
Selection.Copy
Workbooks(1).Worksheets("deutsch").Range("E" & i, "L" & i).PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False
End If
End If
Next i2
Next i
End Sub
Vielleicht kann mir von euch ja jemand helfen ich bin leider ein Anfänger mit vba
Vielen Dank schonmal im Voraus.
Gruß Daum

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 14:19:40
Matthias
Hallo! Probiere es mal so. Bei Usedrange, kann es sein, dass in den anderen Spalten noch mehr steht, und die werden auch mit zur Anzahl gezählt. VG

Sub Artikel_aus_Materialstammliste_übernehmen()
'Materialstammliste öffnen
Workbooks.Open Filename:="T:\Materialstammliste.xls"
'Variable als Ganzzahlig definiert
Dim i As Integer
Dim i2 As Integer
'i von 5 bis (Benutze Felder zählen)
For i = 5 To Workbooks(1).Worksheets("deutsch").Cells(Rows.Count, 2).End(xlUp).Row
For i2 = 6 To Workbooks("Materialstammliste").Worksheets("Artikelnummern").Cells _
(Rows.Count, 2).End(xlUp).Row
'Wenn nichts dann nichts
If Workbooks(1).Worksheets("deutsch").Range("B" & i)  "" Then
'Vergleich der Spalte B von SL mit Mat.stammliste
If Workbooks(1).Worksheets("deutsch").Range("B" & i) = _
Workbooks("Materialstammliste").Worksheets("Artikelnummern").Range("B" & i2) Then
Workbooks("Materialstammliste").Worksheets("Artikelnummern").Range("C" & i2). _
Copy
Workbooks(1).Worksheets("deutsch").Range("C" & i).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Workbooks("Materialstammliste").Worksheets("Artikelnummern").Range _
("E" & i2, "L" & i2).Copy
Workbooks(1).Worksheets("deutsch").Range("E" & i, "L" & i).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
End If
Next i2
Next i
End Sub

Anzeige
AW: vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 14:22:50
Daniel
Hi
die UsedRange als Zellbereich hat so ihre Tücken und wird nicht immer zuverlässig ermittelt.
Excel verfährt bei der UsedRange nach dem Prinzip "lieber manchmal etwas zu gross, dafür aber niemals zu klein".
Ausserdem wird die UsedRange nicht nur durch Zellen mit einem Wert oder einer Formel bestimmt, sondern auch durch Formatierungen wie Rahmen oder Hintergrundfarbe.
zuverlässiger ist, die letzte Zelle mit Inhalt über das End(xlup) von der letzten Zeile aus zu ermitteln.
For i = 5 To Workbooks(1).Worksheets("deutsch").Cells(Rows.Count, 1).End(xlup).Row
in der Tabelle dürfen keine Filter aktiv sein und du musst wissen, in welcher Spalte du diese Prüfung durchführen kannst (hier Spalte A)
Gruß Daniel

Anzeige
AW: vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 16:38:34
Daum
Vielen Dank für eure schnellen Antworten. Funktioniert jetzt super.
Eine Frage noch dazu. Momentan funktioniert dieses Makro nur für die zu erst geöffnete Arbeitsmappe
For i = 5 To Workbooks(1).Worksheets("deutsch").Cells(Rows.Count, 1).End(xlup).Row
kann man es auch so umschreiben, dass es sich auf die Arbeitsmappe bezieht die ich auf habe und in der ich das Makro gestartet habe.
Danke nochmal
Gruß Daum

AW: vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 16:53:22
Daniel
Hi
klar.
die Mappe mit dem Makro kannst du immer mit THISWORKBOOK ansprechen.
Gruß Daniel

Anzeige
AW: vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 17:22:26
Daum
Hi,
Also ich hab mal alle "Workbooks(1)" durch "ThisWorkbook" ersetzt
Funktioniert so leider nicht. Ich denke mal weil er ja als ersten Schritt die Mappe "Materialstammliste" öffnet oder?
und auch später wenn er es kopieren soll ist ja die Materialstammliste im Vordergrund offen.
Und die Listen wo er es hin kopieren soll heißen auch immer anders deshalb kann ich hier ja auch nicht mit dem Namen arbeiten.
Hast du da vielleicht noch eine Idee

AW: vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 17:45:50
Matthias
Hallo! Kommt dann eine Fehlermeldung oder stimmt das Ergebnis nicht? ThisWorkbook ist immer die Mappe mit dem Code - egal welche Blätter noch geöffnet werden / wurden. Das mit der Mappe im Vordergrund ist eigentlich egal. Du spricht ja die Mappen mit Namen / Index an und nicht mit active... . Nur dann sollte sich das mit dem select, öffnen etc. auswirken. VG

Anzeige
AW: vba Code vergleicht zwei Zellen lange Laufzeit
01.07.2016 08:13:15
Daum
Hi,
jetzt weiß ich wo dran es liegt. Wir haben die Makros alle in einer Extra Mappe (Mein Büro) damit alle Nutzer darauf zugreifen können. Gibt es hierfür auch ein Möglichkeit ?
Also ich habe Mappe (SL) offen
das Makro liegt in Mappe (mein Büro)
Makro soll Mappe SL und Mappe Mat.liste vergleichen.
danke nochmal

AW: vba Code vergleicht zwei Zellen lange Laufzeit
01.07.2016 13:05:52
Daniel
Hi
in diesem Fall wirst du nicht drum herum kommen, die Mappen über ihren Namen anzusprechen:
Workbooks("SL.xlsm") und Workbooks("Mat.liste.xlsm")
du solltest dann auch vor jedem Range, Cells, Columns und Rows immmer vollständig referenzieren, dh:
Workbook().Worksheets().Range()
Gruß Daniel

Anzeige
AW: vba Code vergleicht zwei Zellen lange Laufzeit
30.06.2016 16:41:08
Daum
Vielen Dank für eure schnellen Antworten. Funktioniert jetzt super.
Eine Frage noch dazu. Momentan funktioniert dieses Makro nur für die zu erst geöffnete Arbeitsmappe
For i = 5 To Workbooks(1).Worksheets("deutsch").Cells(Rows.Count, 1).End(xlup).Row
kann man es auch so umschreiben, dass es sich auf die Arbeitsmappe bezieht die ich auf habe und in der ich das Makro gestartet habe.
Danke nochmal
Gruß Daum

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige