変更されたデータのみ抽出するには?

Question 33.3   Previous Next
表の変更前と変更後のデータを、変更したデータのみテキストで抽出したいのですが、どうすればいいのでしょうか。
ちなみに私は変更前に一端表を別シートに値のみコピーし、変更後のデータと比較させようかと思っているのですが、比較の仕方もイマイチ分かりません。
教えてください。よろしくお願いいたします。
Answer   Copyright (C) 2000.10.31 永井善王
あなたのイメージを図にしてみました。
変更 「前」シート 変更 「後」シート 「差分」シート
変更前 変更後 差分
「前」シートと「後」シートの値を比較して、変更されたデータだけを「差分」シートに表示するためには、どんな方法があるでしょうか。いろいろな方法があるかも知れませんが、あなたのイメージに合うのは MATCH関数 と思います。

MATCH関数とは
この関数はワークシート関数で、数式としてセルに直接入力して利用できますし、マクロからでも使用可能です。この関数の機能を正確に解説すると、非常にわかりにくくなってしまいます。それは色々な検索機能を持っているからです。きちんと知りたい方は、マイクロソフト社のリファレンスを見てください。
ここでは、指定した値が指定したセル範囲内に存在しなければ、エラー値を返してくれる機能 を利用します。

  MATCH関数の書式 ・・・ MATCH(検査値, 検査範囲, 照合の型)


ここからは体験学習しましょう。操作方法は次のとおりです。

1. Excelを起動して新規ブックを表示する
2. 上図のとおりに「前」シートと、「後」シートを作成する (セルの色と書式設定は不要)
3. 「差分」シートにするための新しいシートを用意する
4. 「差分」シートの B2セルに 下記のとおり MATCH関数を入力する。

   =MATCH(前!B2, 後!B2, 0)

前!B2 が検査値で 「前」シートの B2セルの値を意味します。後!B2 は検査範囲で「後」シートの B2セル。0 は照合の型で 一致する値のみを検索します。

B2セルに結果が表示されましたか? エラー値の #N/A が表示されれば、ひとまず正解です。指定した値が存在しないとエラー値が返るのでしたね。ここでは 「そのセルは変更されている」 という意味合いになります。
これで半分できました。

続いて、変更されたデータだけを取り出す方法を、2ステップに分けて考えてみましょう。

【ステップ1】 MATCH関数の結果がエラー値かどうかを ISERROR関数で調べる

  ISERROR関数の書式 ・・ ISERROR(テストの対象)

この関数は、テストの対象がエラー値の場合に TRUE を返します。
テストの対象 とは、上記の MATCH(前!B2,後!B2,0) のことですから、それを代入すると次のようになります。

   ISERROR(MATCH(前!B2,後!B2,0))


【ステップ2】 IF関数を使って、MATCH関数の結果がエラー値ならば「後」シートの値をセット、そうでなければ Nullをセットする

  IF関数の書式 ・・ IF(論理式, 真の場合, 偽の場合)

   =IF(ISERROR(MATCH(前!B2,後!B2,0)),後!B2,"")


B2セルに先ほど入力した数式を、上記のとおり修正してください。その結果、「×」と表示されたら正しいです。
さあ、あと一息です。
「差分」シートの B2セルに正しい数式が入っていますね。それを、セル範囲 A1:B5にコピー貼り付けします。
上図の「差分」シートと同じように表示されたましたか。

質問文にある「変更したデータのみテキストで抽出したい」とは、この「差分」シートでよいのでしょうか。もしも、テキストファイルにしたかったのでしたら、「差分」シートを新規のブックにコピーしてから、テキストファイルとして保存すれば可能と思います。
なお、マクロで組みたい場合は、以上の内容を自動記録したものを母体にして、部分修正する方法が良いかと思います。工夫してみてください。

 

Excel VBA Macro