2016-12-22 2 views
1

ich nämlich zwei Excel-Dateien haben, „Source.xlsx“ und „Target.xlsx“ mit Daten wie:Wie werden Daten in zwei Arbeitsmappen Zeilen- und Spalten weise zu vergleichen, um die Daten in Ziel Arbeitsmappe hinzufügen

Source.xlsx

A  B  C  D   E 
Signal From To Conductor Cable 
#112 68  145 1  1935 
#113 78  146 2  1936 
#114 88  147 3  1937 
#115 98  148 4  1938 
#116 108  149 1  1939 
#117 118  150 2  1940 
#118 128  151 3  1941 
#119 138  152 4  1942 
#120 148  153 1  1943 
#121 158  154 2  1944 

Traget.xlsx

A  B  C   D  E 
From To Conductor Signal Cable 
68  145      1935 
78  146      1936 
88  147      1937 
98  148      1938 
108 149      1939 
118 150      1940 
165 151      1941 
138 152      1942 
122 133      1943 
158 154      1944 

Anforderungen:

  1. Ich möchte Daten in beiden Excel-Arbeitsmappen (Blatt 1 für beide) Zeile und Spalte vergleichen. Wenn es übereinstimmt, werden Daten von Signal- und Leiterspalten von Source zu Signal der Zieldatei und Leiterspalten hinzugefügt. Die Kriterien für den Abgleich der Daten sind 1. Reihe Spalte B, Spalte C und Spalte E in Quelldatei und 1. Zeile Spalte A, Spalte B und Spalte E und so weiter.

  2. Sobald die Daten kopiert sind, möchten Sie diese Zeile grün färben, bis die Daten in die Zelle gefüllt sind.

Ich habe den folgenden Code versucht:

Sub E3ToEPlan() 
' E3ToEPlan Macro 
' Macro to Check/ Transfer data in E3 and EPlan Excel files 

Dim sourcebook As Workbook, targetbook As Workbook 
Dim sourcesheet As Worksheet, targetsheet As Worksheet 
Dim sourcefilename As String, targetfilename As String 

sourcefilename = "C:\Source.xlsx" 
targetfilename = "C:\Target.xlsx" 

Set sourcebook = Workbooks.Open(sourcefilename) 
Set targetbook = Workbooks.Open(targetfilename) 

Set sourcesheet = sourcebook.Worksheets(1) 
Set targetsheet = targetbook.Worksheets(1) 

Dim column_count As Long, row_count As Long 
column_count = sourcesheet.Columns.Count 
row_count = sourcesheet.Rows.Count 
'sourcesheet.Range("A2:A9").Copy 
'targetsheet.Range("D2:D9").PasteSpecial 

'Condition to match the data in the other workbook 
Dim i As Integer, j As Integer 
For i = 0 To column_count 
    'For j = 0 To column_count 
     If sourcesheet.Cells(i, 2).Value = targetsheet.Cells(i, 1).Value And sourcesheet.Cells(_ 
     i, 3).Value = targetsheet.Cells(i, 2).Value And sourcesheet.Cells(i, 5).Value = targetsheet _ 
     .Cells(i, 5) Then 
      sourcesheet.Cells(i, 1).Value.Copy 
      targetsheet.Cells(i, 4).Value.PasteSpecial 
      sourcesheet.Cells(i, 4).Value.Copy 
      targetsheet.Cells(i, 3).Value.PasteSpecial 
      targetsheet.Cells(i, column_count).Interior.Color = vbGreen 
     End If 
    'Next j 
Next i 
End Sub 

aber es gibt mir Fehler bei If-Anweisung. error

+0

Anfangswert von 'I' in der Schleife '0' ist, und Sie können nicht' Zellen (0,2) ' –

+0

Ihren Bedarf verschachtelte Schleifen haben um die richtige Zeile im zweiten Blatt zu finden, – dgorti

Antwort

1

Ich habe den Code getestet und es funktioniert.

Es gibt ein paar Probleme:

  • kippen Sie verwenden Value.CopyValue auf den Wert inder Zelle, das Ergebnis einer Formel oder eine Textzeichenfolge
  • Columns.Count zählt all Columns in dem Blatt bezieht sich die Gleiches gilt für Rows. Ich habe einen anderen Code hinzugefügt, um die Menge des verwendeten Columns und Rows
  • Die Spalten und Zeilen in Excel beginnen bei 1 daher zu bestimmen, gibt es keine 0, die für Ihre For i = 0 To column_count als Startzeile verwendet wird, anschließend habe ich geändert, dass zu gehe von 1 zu 'LastRow', von dem ich annahm, dass du jede Zeile durchlaufen wolltest.

Siehe Code unten:

Option Explicit 

Sub E3ToEPlan() 
    ' E3ToEPlan Macro 
    ' Macro to Check/ Transfer data in E3 and EPlan Excel files 

    Dim sourcebook As Workbook, targetbook As Workbook 
    Dim sourcesheet As Worksheet, targetsheet As Worksheet 
    Dim sourcefilename As String, targetfilename As String 

    sourcefilename = "C:\Source.xlsx" 
    targetfilename = "C:\Target.xlsx" 

    Set sourcebook = Workbooks.Open(sourcefilename) 
    Set targetbook = Workbooks.Open(targetfilename) 
    Set sourcesheet = sourcebook.Worksheets(1) 
    Set targetsheet = targetbook.Worksheets(1) 

    Dim LastColumn As Long 
    LastColumn = sourcesheet.Cells(1, Columns.Count).End(xlToLeft).Column 

    Dim LastRow As Long 
    With sourcesheet 
     LastRow = .Range("A1").SpecialCells(xlCellTypeLastCell).Row 
    End With 

    'Condition to match the data in the other workbook 
    Dim CurrentRow As Long 
    Dim SourceShtColB As String, SourceShtColC As String, SourceShtColE As String 
    Dim TargetShtColA As String, TargetShtColB As String, TargetShtColE As String 

    For CurrentRow = 1 To LastRow 

     SourceShtColB = sourcesheet.Cells(CurrentRow, 2).Value 
     TargetShtColA = targetsheet.Cells(CurrentRow, 1).Value 
     SourceShtColC = sourcesheet.Cells(CurrentRow, 3).Value 
     TargetShtColB = targetsheet.Cells(CurrentRow, 2).Value 
     SourceShtColE = sourcesheet.Cells(CurrentRow, 5).Value 
     TargetShtColE = targetsheet.Cells(CurrentRow, 5).Value 

     If SourceShtColB = TargetShtColA And _ 
      SourceShtColC = TargetShtColB And _ 
       SourceShtColE = TargetShtColE Then 

      targetsheet.Cells(CurrentRow, 4) = sourcesheet.Cells(CurrentRow, 1) 
      targetsheet.Cells(CurrentRow, 3) = sourcesheet.Cells(CurrentRow, 4) 
      targetsheet.Cells(CurrentRow, LastColumn).Interior.Color = vbGreen 

     End If 

    Next CurrentRow 
End Sub 
+0

@ Jean Ihre Antwort funktioniert ordnungsgemäß. Schätzen Sie Ihre Antwort. Gibt es eine andere Möglichkeit, die Farbe auf die ganze Zeile zu setzen, abgesehen von der Bearbeitung, die ich in Ihrer Antwort gemacht habe? – Divyanshu

+0

Hallo, @Divyanshu ändern Sie einfach die letzte Zeile der letzten 'If' Anweisung in die folgenden:' targetsheet.Rows (CurrentRow) .Interior.Color = vbGreen' –

Verwandte Themen