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


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

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

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

回答の条件
  • 1人5回まで
  • 登録:2009/04/11 02:02:20
  • 終了:2009/04/18 02:05:02

回答(5件)

id:TREEG No.1

TREEG回答回数255ベストアンサー獲得回数342009/04/11 02:21:22

ポイント20pt

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

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

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

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

id:jccrh1 No.2

jccrh1回答回数111ベストアンサー獲得回数192009/04/11 07:01:48

ポイント20pt

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

 

Sheet2のB列に

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

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

 

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

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

id:pahoo No.3

pahoo回答回数5960ベストアンサー獲得回数6332009/04/11 07:11:04

ポイント20pt

シート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,"○","")
id:silvertail No.4

silvertail回答回数100ベストアンサー獲得回数32009/04/11 07:13:36

ポイント20pt

次の関数でどうでしょう

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

id:Mook No.5

Mook回答回数1312ベストアンサー獲得回数3912009/04/11 19:27:28

ポイント20pt

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


■関数を使用した方法

シート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

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません