私はこの問題を何回も経験していて、それを解決するには満足のいく方法は見つけられませんでした。これを行うには簡単なマクロでなければならないと確信しています。 私は行の名前、列の月、および値を持つ大きなテーブルを得ました。この例のように:Excelで2つのテーブルをマージするマクロ
Jan-17 Feb-17 Mar-17
CS 12 10 9
GS 1 5 3
JPM 43 35 40
UBS 11 15 13
毎月新しい値が得られますが、名前は必ずしも同じではありません。もはや表示されないいくつかの新しい名前といくつかの古いがあります。たとえば、これを例に挙げてみましょう:
Apr-17
BNP 21
Citi 75
CS 11
UBS 8
これを元の大きなテーブルに追加する必要があります。だから今月の新しいものにはゼロの新しい行を追加し、今月は消える古いもののためにゼロを入れる必要があります。結果としてこのようなものが欲しい:
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
私が今までに得た最良の解決策は、両方のテーブルの名前をループして比較することです。ミスマッチがメインテーブルの次の名前を確認したとき、それらの2つが一致した場合は、新しい名前です。そうでなければ、私は新しいテーブルの次の名前をチェックし、それが一致すれば、それは表示されなくなった古い名前であることを意味します。以下のコードを参照してください:
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
これは名前が常にアルファベット順に短くなっていることを前提としていますが、これは問題ではありません。これは、2つの古い名前または新しい名前の連続(他のものの中でも)があるときに失敗するため、素晴らしい解決策ではありません。
誰かがこれを解決する方法をアドバイスできますか?いくつかのコードまたは擬似コードは高く評価されます。ありがとう。
VBAが必要ですか?代わりに 'Index/Match'や' VLOOKUP'の式を使うことができると確信しています。 – BruceWayne
私はVBAを使う必要はありませんが、これをすばやく簡単に行う方法を探しています。実際のものは数百行あり、このプロセスは同様のテーブルで数回実行する必要があります。それがもっと自動化されたソリューションであれば良いのです。 –