今、Sheet1、SheetA、SheetB、SheetC、SheetD、SheetEの、6つのシートがあります。
それぞれのシートのA列には2行目から500行目までに、文字列が入っております。
この状況におきまして。
Sheet1のA列を比較元とし、SheetAからEのA列すべてを比較します。
その際、2行目なら2行目、3行目なら3行目、500行目なら500行目同士と、比較の対象はA列の同じ行同士を指定します。
結果につきまして、まずSheet1のB列の各行に、文字列が完全一致しているかどうか(true or false)の結果を出力します。
次にSheet1のC列に、行同士を比較した差分の中身を抽出、出力します。
その際「どこまで文字列が一緒で、どこから違いが出たのか」を把握したいので、比較した際に「文字列が長かった方の、一致しなかった文字列の内容のみ」を、出力したいです。
最後に、文字列が長かった方(差分があった方)が、Sheet1なのか、SheetA〜Eの方なのか、どちらなのかを、Sheet1のD列に出力したいです。
そういった処理がもし関数やマクロで効率的に出来るようでしたら、お教えいただけないでしょうか。
よろしくお願い致します。
SheetAの場合を例にします。
1.文字列が完全一致
SheetAのB2に、以下の式を設定し対象最下行までフィル
=EXACT(Sheet1!A2,SheetA!A2)
2.文字列の差分
コメントにもあるように、仕様が不明確なのでパス
(仕様が明確になっても、VBAを使わないと難しそう・・)
3.文字列の長い方
SheetAのD2に、以下の式を設定し対象最下行までフィル
=IF(LEN(Sheet1!A2)>LEN(SheetA!A2),"Sheet1",IF(LEN(Sheet1!A2)<LEN(SheetA!A2),"SheetA","同一長"))
以上の内容を、SheetBからSheetEまで繰り返し
当然ながら、式のSheetAの部分は全て対象のシート名に変更が必要。
最初から"SheetA!"を記述しなければそんな手間はかからないのだけれど、"Sheet1"との違いを明確にするため、あえて書いてます。そのあたりをどうするかは、お好みでどうぞ。
注意
文字列長の比較は、データが日付のみの場合等、意図した結果にならない場合があります。データが文字列のみであれば問題はないと思われます。
https://qiita.com/akashima/items/4a31edc00b6768c9c4c7
この記事にあるように、WinMergeにプラグインを足せば比較できますが。
Sheet1が「あいうえお」
SheetAが「あいう」
SheetBが「あいうえおかきく」
の場合、C列およびD列の結果はどうなりますか?
また、
Sheet1が「あいうえお」
SheetA~Eが全く一致していない「かきくけこ」
の場合はどうなりますか?