Excelでシートを比較して差分を抽出したいです。

今、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列に出力したいです。

そういった処理がもし関数やマクロで効率的に出来るようでしたら、お教えいただけないでしょうか。

よろしくお願い致します。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2019/01/13 22:57:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Z1000S No.2

回答回数39ベストアンサー獲得回数27

ポイント1000pt

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"との違いを明確にするため、あえて書いてます。そのあたりをどうするかは、お好みでどうぞ。

注意
文字列長の比較は、データが日付のみの場合等、意図した結果にならない場合があります。データが文字列のみであれば問題はないと思われます。

id:moon-fondu

遅くなりましてすみません…ありがとうございます!関数で比較できました(^^;
仕様が不明確ですみません、次はちゃんと質問します<m(__)m>

2019/01/13 22:56:40

その他の回答1件)

id:hengsu No.1

回答回数187ベストアンサー獲得回数10

ポイント30pt

https://qiita.com/akashima/items/4a31edc00b6768c9c4c7
この記事にあるように、WinMergeにプラグインを足せば比較できますが。

id:moon-fondu

ありがとうございます、参考にします。

2019/01/13 22:55:58
id:Z1000S No.2

回答回数39ベストアンサー獲得回数27ここでベストアンサー

ポイント1000pt

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"との違いを明確にするため、あえて書いてます。そのあたりをどうするかは、お好みでどうぞ。

注意
文字列長の比較は、データが日付のみの場合等、意図した結果にならない場合があります。データが文字列のみであれば問題はないと思われます。

id:moon-fondu

遅くなりましてすみません…ありがとうございます!関数で比較できました(^^;
仕様が不明確ですみません、次はちゃんと質問します<m(__)m>

2019/01/13 22:56:40
  • id:takashi_m17
    仮に
    Sheet1が「あいうえお」
    SheetAが「あいう」
    SheetBが「あいうえおかきく」
    の場合、C列およびD列の結果はどうなりますか?

    また、
    Sheet1が「あいうえお」
    SheetA~Eが全く一致していない「かきくけこ」
    の場合はどうなりますか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません