人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【エクセルで2シート間での文字列重複チェック】

ブックの中にシート1とシート2があり、シート1のA列には5000行の文字列、シート2のA列には50000行の文字列があります。
シート1とシート2には重複するデータがあり、何が重複しているのかをわかりやすくしたいと考えています。

予期しているものとしては、シート1とシート2でデータが重複していた場合、シート2の該当行のB列に○をつけるイメージです。(重複したものを削除はしません。)

方法は手作業・マクロどちらでもかまわないのですが、何かいい方法はないでしょうか?

1239382937
●拡大する

●質問者: res01
●カテゴリ:コンピュータ
✍キーワード:イメージ エクセル データ マクロ 文字列
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● TREEG
●20ポイント

下記でいかがでしょうか?

シート2のB1へ入れることを想定しています。

あとは、オートフィルで最終行まで入れれば良いかと思います。

=IF(COUNTIF(Sheet1!A:A,Sheet2!A1)>0,"○","")


2 ● jccrh1
●20ポイント

単純にVlookup関数で良いと思います。

Sheet2のB列に

B2: =IF(ISERROR(VLOOKUP(A2,Sheet1!A:A,1,FALSE)),"","○")

B3セル以降はB2セルをコピーしてください。

B列のデータが多い場合はフィルハンドル(B2セルの右下でマウスカーソルが+になる所)を

ダブルクリックすればデータが入っている所までコピーされるので便利だと思います。


3 ● pahoo
●20ポイント

シートAを [A]、シートVを [B] という名前にしたとすると、[B] の B列に以下のような式を代入してください。

式は1行目を入力するだけで、あとは2行目以降へコピー&ペースとしていけば、自動的に式の行番号を増やしていってくれます。

A B
1 ネズミ =IF(VLOOKUP(A1,A!A:A,1)=A1,"○","")
2 らいおん =IF(VLOOKUP(A2,A!A,1)=A2,"○","")
3 いわし =IF(VLOOKUP(A3,A!A:A,1)=A3,"○","")

4 ● silvertail
●20ポイント

次の関数でどうでしょう

=IF(ISERROR(VLOOKUP(A2,シート1!$A$1:$A$5000,1,0)),"","○")


5 ● Mook
●20ポイント

最初のやり方に関してはおそらく既に誰かが回答していると思いますが、いろいろなやり方があるということで。


■関数を使用した方法

シート1のA列を選択して名前ボックスに「LIST_A」(好きな名前)を付けます。

http://www.relief.jp/itnote/archives/000208.php

http://kokoro.kir.jp/excel/name.html


シート2のB1 に下記の式を書き

=IF(COUNTIF(LIST_A,A1)>0,"○","")

として、B1をコピーし、B列に張り付ければ、希望の動作になります。


■条件付き書式を使用した方法

条件付き書式を使用すれば、作業列を使用しなくともあるものに色を付ける等で判定することができます。

シート2でA列を選択し条件付き書式で、「数式が」を選択し

=COUNTIF(LIST_A,A1)>0

として、塗りつぶし等で好きな書式を設定します。


■マクロを使用した方法

マクロを使用すれば、実際にどのセルが重なっているか位置情報を洗い出すことができます。


手順は、ALT+F11で表示されるウィンドウで、

「挿入」⇒「標準モジュール」を選び、

下記を張り付ける(シート名はお使いのファイルに合わせて変更ください)。

EXCELに戻って、ALT+F8 で CheckData を実行です。

Option Explicit

'★★★ 実際に合わせて変更
 Const SHEET1 = "シート1"
 Const SHEET2 = "シート2"

Sub CheckData()
 Dim srcWS As Worksheet
 Set srcWS = Worksheets(SHEET1)

 Dim dstWS As Worksheet
 Set dstWS = Worksheets(SHEET2)

 Dim i As Long
 Dim lastRow As Long
 Dim r As Range, f As Range
 
 lastRow = dstWS.Range("A" & Rows.Count).End(xlUp).Row
 For i = 1 To lastRow
 If dstWS.Cells(i, "A").Value <> "" Then
 Set r = srcWS.Columns(1).Find(what:=dstWS.Cells(i, "A").Value, lookat:=xlWhole)
 If Not r Is Nothing Then
 dstWS.Cells(i, "B").Value = r.AddressLocal(0, 0)
 Set f = r
 Do While True
 Set r = srcWS.Columns(1).FindNext(r)
 If r.AddressLocal = f.AddressLocal Then Exit Do
 dstWS.Cells(i, "B").Value = dstWS.Cells(i, "B").Value & "/" & r.AddressLocal(0, 0)
 Loop
 End If
 End If
 Next
End Sub
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ