2017-09-28 1 views
1

Ich hatte dieses Problem mehrmals und habe nie eine befriedigende Lösung gefunden. Ich bin mir sicher, dass es ein einfaches Makro sein muss, um das zu erreichen. Ich habe eine große Tabelle mit Namen in der Zeile, Monaten in den Spalten und Werten. Wie dieses Beispiel:Makro, um zwei Tabellen in Excel zusammenzuführen

 Jan-17 Feb-17 Mar-17 
CS  12  10  9 
GS  1  5  3 
JPM  43  35  40 
UBS  11  15  13 

Und jeden Monat bekomme ich die neuen Werte, aber das Problem ist: die Namen sind nicht unbedingt die gleichen. Es gibt ein paar neue Namen und ein paar alte, die nicht mehr auftauchen. Sagen wir das als Beispiel:

 Apr-17 
BNP 21 
Citi 75 
CS  11 
UBS  8 

Ich muss dies der ursprünglichen großen Tabelle hinzufügen. Also, ich muss eine neue Zeile voller Nullen für das neue Zeug dieses Monats hinzufügen und in diesem Monat eine Null für die alten Sachen setzen, die verschwinden. Ich möchte so etwas wie dies als Ergebnis:

 Jan-17 Feb-17 Mar-17 Apr-17 
BNP  0  0  0  21 
Citi 0  0  0  75 
CS  12  10  9  11 
GS  1  5  3  0 
JPM 43  35  40  0 
UBS 11  15  13  8 

Die beste Lösung, die ich jetzt habe, bis Schleife ist gedacht, um die Namen in beiden Tabellen und vergleichen sie. Wenn es einen Konflikt gefunden hat, überprüfen Sie den nächsten Namen in der Haupttabelle, wenn diese beiden übereinstimmen, bedeutet das, dass es sich um einen neuen Namen handelt. Wenn nicht, dann prüfe ich den nächsten Namen in der neuen Tabelle und wenn das stimmt, bedeutet das, dass ein alter Name nicht mehr angezeigt wird. Sehen Sie meinen Code unten:

Sub FixColumnsNames() 

'This sub Compare the names in the Summary and the Input tab and put the same names on both 
Dim LoopRow As Integer 
LoopRow = 1 

While Sheets("Input").Range("A" & LoopRow) <> "Grand Total" 
'Walkthought tha name list until we find the end (Grand Total) 

    If Sheets("Input").Range("A" & LoopRow).Value <> Sheets("Summary").Range("A" & LoopRow).Value Then 
    'If two names don't match lets analyse: 

     If Sheets("Input").Range("A" & LoopRow + 1).Value = Sheets("Summary").Range("A" & LoopRow).Value Then 
     'New Strategy 
      Sheets("Summary").Rows(LoopRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
      Sheets("Summary").Range("A" & LoopRow).Value = Sheets("Input").Range("A" & LoopRow).Value 
     End If 

     If Sheets("Input").Range("A" & LoopRow).Value = Sheets("Summary").Range("A" & LoopRow + 1).Value Then 
     'Old strategy (it has stopped apearing) 
      Sheets("Input").Rows(LoopRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
      Sheets("Input").Range("A" & LoopRow).Value = Sheets("Summary").Range("A" & LoopRow).Value 
     End If 

    End If 
    LoopRow = LoopRow + 1 
Wend 

End Sub 

Dies setzt voraus, die Namen immer alphabetisch kurzgeschlossen werden, aber das ist kein Problem für mich. Dies ist keine großartige Lösung, weil es fehlschlägt, wenn zwei (alte) neue Namen aufeinander folgen (unter anderem).

Kann jemand bitte beraten, wie man das löst? Irgendein Code oder Pseudocode würde geschätzt werden. Vielen Dank.

+0

Benötigen Sie VBA? Ich bin mir ziemlich sicher, dass Sie statt dessen "Index/Match" - oder "SVERWEIS" -Formeln verwenden könnten ... – BruceWayne

+0

Ich muss nicht VBA verwenden, aber ich suche nach einer Möglichkeit, dies schnell und einfach zu machen. Die eigentliche Sache hat ein paar hundert Zeilen und dieser Prozess muss ein paar Mal auf ähnlichen Tabellen durchgeführt werden. Deshalb ist es besser, wenn es eine automatisierte Lösung ist. –

Antwort

0

Sie können das viel schneller mit einer Vlookup-Formel lösen. Suchen Sie zuerst nach neuen Aprilwerten. Sie können dies mit Vlookup April Werten gegen Tabellenwerte tun.

enter image description here

Jetzt copy/PasteValue Werte, die nicht gefunden werden (solche mit # N/A Vlookup Wert) unterhalb Ihrer Haupttabelle, und verwenden Sie diese Formel in Zelle E2 (Anpassungsbereich auf Ihre Bedürfnisse) =IFERROR(VLOOKUP(A2,$H$1:$I$10,2,FALSE),0). Ziehen Sie die Formel nach unten.

enter image description here

+0

Vielen Dank für Ihre Antwort. Du hast CS und UBS dupliziert, anstatt die neuen hinzuzufügen, aber ich habe deine Idee. Ich werde darüber nachdenken, die vlookup-Mechanik in ein Makro zu bringen. –

+0

Sie haben Recht, ich habe meine Antwort korrigiert. Könnten Sie bitte als beantwortet markieren? –

Verwandte Themen