Clever-Excel-Forum

Normale Version: Worksheets Vergleichen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend,

ich habe eine Excel-Datei vorliegen, wo drin ich mit meinen anfänglichen Versuchen gerne, ein Code basteln möchte. Dies habe ich versucht mit einem Einbau eines Arrays versucht zu lösen, aber wahrscheinlich geh ich da viel zu kompliziert ran. Leider stoße ich schon bei den Grundlagen an meinen Grenzen und erhoffe mir, Stück für Stück mir VBA aneignen zu können. Zumindest, dass ich die Grundlagen beherrsche, mit der Hilf von euch.

Zu der Aufgabenstellung:

Ich habe eine Excel-Datei mit zwei verschiedenen Sheets, die vom Aufbau her identisch sind. In den Sheet "Orginal" kommen immer neue Datensätze rein, sprich immer neue Artikel(Zeilen). Im Zweiten Sheet "Bearbeiten" möchte ich diese hinzufügen. Kommen im "Orignal" neue rein, soll ein Abgleich der schon enthaltenen Artikeln in "Bearbeiten" hinten nach  "lastrow" hingefügt werden, wenn sie dort nicht enthalten sind. Den folgenden Code habe ich versucht mit einem Kollegen versucht zu basteln, der zwar vom Fach ist aber viel zu schnell/weit etc denkt. Daher ersuche ich eure Hilfe mir zu unterstützen. Mein Code funktioniert leider nicht. Die Excel-Datei habe ich angehängt und der Code folgenden, wie gesagt:


Code:
Sub xy()
Dim int_REF_col As Integer
Dim int_MSN_col As Integer
Dim re_REF_col As Integer
Dim re_MSN_col As Integer
Dim iZeilen1, leZeile1, iZeilen2, leZeile2 As Long
Dim ar1_vi_ref(), ar2_int_ref(), ar_safe() As String
Dim value, zahl1 As Integer

Dim j, l, m As Long 'Laufvariable für Vergleich der Arrays

'Read column into the Array****************************************************************************************************************************************
'Count the last row in "Orginal-Sheet"
   Worksheets("Orginal").Activate
   Sheets("Orginal").Range("Ref_1").Select
   leZeile1 = ActiveSheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row         'Zählt letzte Position mit Zeile in der Unique Spalte
   iZeilen1 = leZeile1 - ActiveCell.Row                                               'Subtrahiert die letzteZeile -  Überschrift

   ReDim ar1_vi_ref(iZeilen1)

   ActiveCell.Offset(1, 0).Select
   For i = 1 To iZeilen1
       
       ar1_vi_ref(i - 1) = ActiveCell.value
       ActiveCell.Offset(1, 0).Select
   Next
   
'Count the last row in "Bearbeiten"
   Worksheets("Bearbeiten").Activate
   Sheets("Bearbeiten").Range("Ref_2").Select
   leZeile2 = ActiveSheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row         'Zählt letzte Position mit Zeile in der Unique Spalte
   iZeilen2 = leZeile2 - ActiveCell.Row                                               'Subtrahiert die letzteZeile -  Überschrift

   ReDim ar2_int_ref(iZeilen2)
 
   ActiveCell.Offset(1, 0).Select
   For i = 1 To iZeilen2
       
       ar2_int_ref(i - 1) = ActiveCell.value
       ActiveCell.Offset(1, 0).Select
   Next
'Comparing ArrayData**************************************************************************************************************************************************

   For j = 0 To iZeilen1
       For l = 0 To iZeilen2
           j = j + 1
           If ar1_vi_ref(j) = "" Or ar1_vi_ref(j) = ar2_int_ref(l) Then
               l = l + 1
           ElseIf ar1_vi_ref(j) <> ar2_int_ref(l) Then
               ar1_vi_ref(j).value = zahl1
             
         
            End If
   Next l
   Next j
   
   

End Sub

Ich werde jetzt auch öfters im Forum sein, um zu lernen. Da mir VBA programmieren eigentlich Spaß macht, auch wenn ich nicht mal die Grundlagen beherrsche. 

Viele Grüße und Cheers :100:
Hallo,

es ist keine Antwort auf deine Frage, aber ein Hinweis:

http://office-loesung.de/p/viewtopic.php?f=166&t=746191&sid=9781098c85d45ad1ac99e21cce1f149a

Dort gab es eine (etwas) ähnliche Frage.

mfg

(den Code habe ich nicht "gelesen")
Hallo,
zunächst herzlichen Glückwunsch zu Deinem Entschluss, Excel und VBA sind ein hervorragendes Instrument, um die Weltherrschft zu ergreifen! :15:
Ohne Deinen Code zu testen oder voll gelesen zu haben:
Select ist fast immer unnötig und verlangsamt den Ablauf, versuche also, ohne auszukommen.
Als Anlauf habe ich den ersten Teil ohne Select umgesetzt:
 
   With Sheets("Original") 'damit werden ohne Select Zellen in Original angesprochen 
     firstzeile = .Range("Ref_1").Row + 1
     spalte = .Range("Ref_1").Column
     leZeile1 = .Cells(Rows.Count, spalte).End(xlUp).Row         'Zählt letzte Position mit Zeile in der Unique Spalte
     iZeilen1 = leZeile1 - firstzeile + 1                         'Subtrahiert die letzteZeile -  Überschrift
 
     Redim ar1_vi_ref(iZeilen1)
 
     'ActiveCell.Offset(1, 0).Select
     For i = 1 To iZeilen1
         ar1_vi_ref(i - 1) = .Cells(i + firstzeile - 1, spalte).Value
         'ActiveCell.Offset(1, 0).Select
     Next
   End With
(19.09.2017, 19:25)AlterDresdner schrieb: [ -> ]Hallo,
zunächst herzlichen Glückwunsch zu Deinem Entschluss, Excel und VBA sind ein hervorragendes Instrument, um die Weltherrschft zu ergreifen! :15:
Ohne Deinen Code zu testen oder voll gelesen zu haben:
Select ist fast immer unnötig und verlangsamt den Ablauf, versuche also, ohne auszukommen.
Als Anlauf habe ich den ersten Teil ohne Select umgesetzt:
 
   With Sheets("Original") 'damit werden ohne Select Zellen in Original angesprochen 
     firstzeile = .Range("Ref_1").Row + 1
     spalte = .Range("Ref_1").Column
     leZeile1 = .Cells(Rows.Count, spalte).End(xlUp).Row         'Zählt letzte Position mit Zeile in der Unique Spalte
     iZeilen1 = leZeile1 - firstzeile + 1                         'Subtrahiert die letzteZeile -  Überschrift
 
     Redim ar1_vi_ref(iZeilen1)
 
     'ActiveCell.Offset(1, 0).Select
     For i = 1 To iZeilen1
         ar1_vi_ref(i - 1) = .Cells(i + firstzeile - 1, spalte).Value
         'ActiveCell.Offset(1, 0).Select
     Next
   End With

Na du alterDresdner :), 
schöne Grüße aus Hamburg!

Danke zunächst für euren Input zu später Stunde!

Werde ich dann editieren. Macht auch Sinn. Das Ding ist einfach, ich kann mittlerweile die Markos nachvollziehen aber schaffe es einfach nicht selber einen Code zu schreiben, da wie gesagt, mir die Grundlagen fehlen oder mir einfach ein bestimmter Stammbaum an Wissen fehlt :19: aber dran bleiben, würdest du jetzt wahrscheinlich schreiben .

Zitat:Fennek



Hallo,

es ist keine Antwort auf deine Frage, aber ein Hinweis:

http://office-loesung.de/p/viewtopic.php...1cce1f149a

Dort gab es eine (etwas) ähnliche Frage.

mfg

(den Code habe ich nicht "gelesen")

Ich werden den Thread mal mitverfolgen. Habe mir den Code auch angeschaut, steige aber nicht zu 100% durch. Danke!
Hallo Sunpoint,

du musst nicht immer den gesamten Beitrag zitieren. Entweder suchst du dir einen bestimmten Teil aus oder du benutzt den Antwort-Button am Ende des Antwortformulars (nicht den Zitieren-Button).
Hat jemand keinen anderen Ansatz?  *kleiner Push*  Sleepy

Grüße,
Sun
Hallo,

(23.09.2017, 10:09)Sunpoint schrieb: [ -> ]Hat jemand keinen anderen Ansatz?

ich habe keinen anderen Ansatz.

Gruß Uwe
Hallo Sunpoint,

eventuell kannst Du auch die Daten alle anfügen und dann die Duplikate entfernen?
Kann geschlossen werden! 

Zum Vorredner, genau das tut das Makro., dennoch vielen Dank  Blush