• ベストアンサー

エクセルのデータ照合

AとB2つのエクセルシートがあって、Aのシートのデータが Bのシートにもあるかどうかを調べる時どのようにすればいいのでしょうか? 例えば・・・、 <シートA>    A  B C D E F G <シートB> A B H I というエクセルデータがあって、シートBのデータがシートAにあるか どうか(AとBはあるのでYES、HIはないのでNO)など一発で 検索する方法を教えていただけないでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.6

>オートフィルすると、“範囲”の数値までずれこんでいくようです。 >範囲は固定でオートフィルする方法はありますか?? “範囲”をたとえば VLOOKUP(A1,SheetB!A2:A10,1,FALSE) のように指定すると、下にオートフィルすると VLOOKUP(A2,SheetB!A3:A11,1,FALSE) VLOOKUP(A3,SheetB!A4:A12,1,FALSE) VLOOKUP(A4,SheetB!A5:A13,1,FALSE) … とずれていきます。 それを防ぐには VLOOKUP(A1,SheetB!A$2:A$10,1,FALSE) と範囲の行番号の前に“$”をつけます。 検索する値である“A1”にはつけてはいけません。 オートフィルしたときに、ずれていってほしいからです。 オートフィルしたときに「固定したい行番号または列記号の前に“$”をつける」と覚えてください。 詳しくは、このサイトでも「相対参照」「絶対参照」として多くのQ&Aがあるので、そちらを参考にしてみてください。 http://oshiete.goo.ne.jp/search_goo/result/?PT=&from=&nsMT=&mt_opt=a&qatype=qa&st=all&sr=norm&tf=all&MT=%C1%EA%C2%D0%BB%B2%BE%C8%A1%A1%C0%E4%C2%D0%BB%B2%BE%C8&c= ……… 私の例では、SheetBのA列を丸ごと“範囲”としましたので、下にオートフィルしても“範囲”がずれることはありません。ただし、横にオートフィルすると“範囲”がずれます。

ukiukigirl
質問者

お礼

ありがとうございます! とてもよく分かりました!! 助かりました(^^)

その他の回答 (5)

  • argument
  • ベストアンサー率63% (21/33)
回答No.5

VBAでの回答です Sub mycheck() Sheets("A").Select For i = 1 To 65536 If Range("a" & i).Value = "" Then Exit For asheet = asheet & Range("a" & i).Value & vbCrLf Next asheet = Split(asheet, vbCrLf) MsgBox UBound(asheet) - 1 Sheets("b").Select: ct = 0 For j = 0 To UBound(asheet) - 1 For i = 1 To 65536 If Range("a" & i).Value = "" Then Exit For If Range("a" & i).Value = asheet(j) Then MsgBox (asheet(j) & "が一致しました。"): ct = ct + 1 If Range("a" & i).Value = asheet(j) Then Range("b" & i).Value = "yes" Next Next MsgBox ct & "件重複がありました。" End Sub A シートA列に A  B C D E F G B シートA列に A B H I の状態でマクロを実行すると Aが一致しました。 Bが一致しました。 を表示し、Bシートには重複したデータの隣 つまりBシートB列の重複データがある場所にyesと書き込みます 処理違いや補足・修正が欲しい場合言ってください。書き直します。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

#2です。 なければNoをいれるんでしたね。修正します。 Sub test02() x = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row y = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row Sheet1.Columns("B:B").ClearContents Sheet2.Columns("B:B").ClearContents For i = 1 To x For n = 1 To y If Sheet1.Cells(i, "A") = Sheet2.Cells(n, "A") Then Sheet1.Cells(i, "B") = "Yes" Sheet2.Cells(n, "B") = "Yes" Else If Sheet1.Cells(i, "B") = "" Then Sheet1.Cells(i, "B") = "No" If Sheet2.Cells(n, "B") = "" Then Sheet2.Cells(n, "B") = "No" End If Next n Next i End Sub

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

シートB の B2セルに =COUNTIF(シートA!A:A,A2) 下までコピィすると シートAにデータが何個あるかが出ます。 あるものが 1以上 ないものが 0ですが、如何でしょうか。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

VBAのやりかた AシートはSheet1 BシートはSheet2 とします。 Sub test01() x = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row y = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To x For n = 1 To y If Sheet1.Cells(i, "A") = Sheet2.Cells(n, "A") Then Sheet1.Cells(i, "B") = "Yes" Sheet2.Cells(n, "B") = "Yes" End If Next n Next i End Sub

ukiukigirl
質問者

お礼

回答ありがとうございました! ただPC初心者の私にはむずかしかったです(><)

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

はじめまして Vlookup関数を使えばできると思います。 シートAとシートBのA列の1行目からそれぞれ、ご質問の様なデータが入っているとします。 そのときに、シートAのB列に「あり・なしの判定」を表示させるなら A1に =IF(ISNA(VLOOKUP(A1,SheetB!A:A,1,FALSE)),"No","Yes") 以下オートフィルでできます。 ご質問通りの結果を表示させるために関数が複雑になっていますが、 メインは VLOOKUP(A1,SheetB!A:A,1,FALSE) です。(検索の型で"FALSE"を指定しないと、うまくいきません) シートBの範囲A:A(A列)からA1の文字列を探します。結果は 見つかった場合→その文字列 見つからなかった場合→#N/A(該当なし) となります。 IF関数とISNA関数を使っているのは、判定結果の表示のために入れました。 ISNA関数で#N/Aが出ているか判定し、if関数で、#N/Aが出ていればNo、出ていなければYesを表示させています。

ukiukigirl
質問者

お礼

分かりやすい説明ありがとうございます! ただ、オートフィルすると、“範囲”の数値までずれこんでいくようです。範囲は固定でオートフィルする方法はありますか??

関連するQ&A

  • EXCELのデータ照合で教えてください。

    EXCELで外部データの取込からデータの照合をしたいのですが ←     更新後     →     ←     更新前     →   A    B    C     D    E     F    G     H 1 商品A  4個  商品B  10個  商品C  2個  商品D  10個 2 商品C  4個  商品D   8個  商品E  10個  商品A   4個 この時に、セルA1B1とセルG2H2は、何もせず、セルC1D1には、文字を太字で表示、セルG1H1、黄色で塗つぶし、セルC2D2は、文字を黄色で表示、 セルE1F1、緑色で塗つぶし、セルA2B2は、文字を緑色で表示とかのデータの照合をしたいのですが、どなたか教えて下さい。 宜しくお願い致します。

  • エクセルデータ照合

    エクセルのデータ照合によりデータの統合をしたいです。 Sheet1 A校 50% B校 30% C校 40% D校 30% E校 20% Sheet2 B校 C校 E校 F校 Sheet1 とSheet2 の学校を照合して共通校のみを抽出しSheet3として B校 30% C校 40% E校 20% データ数は約1万件です。 宜しくお願いいたします。

  • エクセルと照合について

    エクセルと照合について 工場に勤務していて、シフト表と給与計算をしています。 エクセルの表がうまく貼りつけられず(列がずれるため)、縦書きですいません。 以下はシート1です。 出勤予定表(A1) Aさん(A2) 1/1(B1)←1/1は日付です。 1(B2) 1/2(C1) 空欄(C2)←休日のことです。 1/3(D1) 3(D2) 1/4(E1) 空欄(E2) 1/5(F1) 1(F2) 1/6(G1) 3(G2) 以下BさんからEさんまで5人分あります。 以下は勤務時間コードです。 1 5:00~13:00 2 8:00~15:00 3 13:00~21:00 以下はシート2に作成している、実際の出勤日です。 Aさん(A2) 1/1(B1)←1/1は日付です。 5:00~13:00(B2) 1/2(C1) 空欄(C2)←休日のことです。 1/3(D1) 13:00~21:00(D2) 1/4(E1) 空欄(C2) 1/5(F1) 5:00~13:00(F2) 1/6(G1) 13:00~21:00(G2) 他にBさんからEさんまで、シート3からシート6まで作成しています。 要は二つのシートをマクロか関数かであっているかどうか照合したのですが、できるのでしょうか。 目視はできるだけ避けたいです。 超初心者ですいません。 お願いします。

  • excelでの行列データの並び替え

    excelで表形式のデータの並び替えをおこないたいのですがいい方法が思いつきません。 どなたか教えて下さい。 具体的には 元のデータは以下の様なフォーマット a b c d e f g h i これを並び替えて a b c d e f g h i としたいということです。 元データの列数は決まっていますが 行数は任意です。

  • 2つエクセルデータを比較し、必要な情報を抽出する方法は?

    sheet1        sheet2      sheet3 19000001 a    19000001 a   19000001 aa 19000001 aa   19000002 b    19000005 ee 19000002 b    19000003 c 19000003 c    19000004 d 19000004 d    19000005 e 19000005 e    19000006 f 19000005 ee   19000007 g 19000006 f    19000008 h 19000007 g    19000009 i 19000008 h    19000010 j 19000009 i    19000011 k 19000010 j    19000012 l 19000011 k 19000012 l sheet1にあるデータから sheet2にはないデータをsheet3に抜き出したい できるだけ簡単な方法を教えてください

  • エクセルでデータを反映させたい。

    エクセルで下記のことをしたいのですが、どのような方法が ありますか?   A B C D E (列) 1 1  a b c d 2 2  e f g h 3 3  i j k l (行) ・他シートにA1の「1」を入れると、B~E列のデータが反映する。 (A列の数字が個人を指すもので、それを選択すると付随するデータ(B~E)も反映するということなんですが・・・。 説明が下手で申し訳ないのですが、どなたか教えて下さい。

  • エクセルでのデータの照合

    お世話になります。WindowsXPエクセル2003を使っているマクロ初心者です。 A B C D E F G 1 2 3  1 2 2 2 3 4  2 3 4 3 4 5  2 4 5 4 5 6  4 4 6 5 6 7  5 6 8 (左グループを元データ、右グループを加工データとします) A列とE列・B列とF列・C列とG列…という流れでデータを比較し、 元データと値の違うセルの色を変え、赤の太字にするようなマクロを作るには どのように書けばいいのでしょうか。 上記例の場合では、E3・F5・G2・G7のセルを変化したいということになります。 条件付書式でも試してみたのですが、なかなかうまくいかなかったため、 これからマクロに触れる機会も増えることを考えて、マクロで対応したく思い、 連絡させていただきました。宜しくお願いいします^^

  • Excel シート間のデータの照合

    Excelで、シート間のお客様データ(だいたい各1万件)を照合します。下記は現在の照合方法ですが、これでは時間がかかるうえ手作業が多く発生しミスにつながります。頻繁に行う作業なので、関数でも、マクロでも、とにかくもう少し簡単にできる方法がありましたら、どうぞご教授ください。よろしくお願いします!! 【目的】 シート「sheet2008」には2008年度のデータ。シート「sheet2007」には「sheet2008」と同じ形式の2007年度のデータが入っています。シート「sheet2008」に、そのお客様の2007年度の担当営業マンを表示させたいのです。 【例】 列A(電話番号): 011-231-1112 列B(名前):佐藤 一郎 列C(住所):北海道札幌市中央区北1-1-1 列D(担当営業マン):鈴木 新規の列(2007年度の担当営業マン):鈴木  ・「sheet2008」「sheet2007」はほぼ同じデータですが、一部のお客様は名前が変わっていたり、住所が変わっていたりします。  ・「sheet2007」にないお客様が「sheet2008」にあったり、その逆があったりして、各シートのデータ件数は一致しません。  ・名前が同じでも住所が違うデータ、電話番号が同じでも担当営業マンが違うデータは別者として扱います。  ・「顧客ID」のような“必ずユニークな情報”は存在しません。 【現在の照合方法】 (1)「sheet2008」の各列の前に空白列を挿入する。  (データの1行目はタイトル行…B1:電話番号/D1:名前/F:住所/H:担当営業マン)  (データの2行目以降はデータ)     列A(空白行):     列B(空白行): 011-231-1112     列C(空白行):     列D(名前):佐藤 一郎     列E(空白行):     列F(住所):北海道札幌市中央区北1-1-1     列G(空白行):     列H(担当営業マン):鈴木 (2)「sheet2007」を列Aの電話番号で昇順に並べ替える。 (3)「sheet2008」の電話番号が「sheet2007」にあるかを調べる。     A2:「=IF(B2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,1,0)),"○","▲")」 (4)(3)で調べた「sheet2008」の電話番号と同じ行にある名前/住所が「sheet2007」にあるかを調べる。     C2:「=IF(D2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,2,0)),"○","▲")」     E2:「=IF(F2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,3,0)),"○","▲")」 (5)電話番号/名前/住所がすべて一致するデータについて、「sheet2007」にある担当営業マンの値を列Gに表示させる。     G2:「=IF((AND(A2="○",C2="○",E2="○"))=TRUE,(VLOOKUP($B2,Sheet2007!$A:$D,4,0)),"▲") (6)"▲"やエラー値で表示される計算結果について、目視で確認する。 (終了)

  • エクセルで条件に合わせて複数データを抽出したい

    シート1に基本データ(基データ)があり、シート2のセル内に条件を入れて、該当のデータをシート1から引っ張りたい。 具体的には、シート1に基本データ  ナンバ- 1 1 2 2 2 3 4 4 4  該当データ A B C D E F G H I シート2に 条件内容 1を入れてA B (複数データ)      2を入れてC D E       3を入れてF -----と、こんな具合になりたいのですが?   VLOOKUP は複数の抽出なので駄目でした。   

  • excel  複数行をまとめる 一括変換

    データ整理で困っております。 皆様のお知恵を拝借したくお願いいたします。 EXCELシートで次のようなデータがあります。   A B C D E F G H I J K 1 1 あ い 2  う え 3  お か 4  き く 5  け こ 列はA,B,Cのみにデータがあります。 行は1~5にあります。 A1は連番で数字があります。 この5行のデータが400近くあります。(約2,000行) このシートが10ほど存在します。 これらのシートを次のように1行に変換したいのです。   A B C D E F G H I J K 1 1 あ い う え お か き く け こ 2  3  4  5  行2~5はブランクのままでもかまいません。 何卒よろしくお願いいたします。

専門家に質問してみよう