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