• ベストアンサー

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)"▲"やエラー値で表示される計算結果について、目視で確認する。 (終了)

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

  • ベストアンサー
回答No.1

(5)電話番号/名前/住所がすべて一致するデータについて、2007年度の担当者を2008年度シートの新規の列に表示させるだけでしたら、各シートのA列に作業列をつくり、そこに、= 電話番号 & 名前 & 住所 の形で、3つを合成した検索データを作ります。あとはVlookupで、一致する物だけ担当者名を表示すれば、1回で済みますが。

pecopocori
質問者

お礼

そうすると(1)~(5)の手順はだいぶ省略されますね、ありがとうございます!

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

こういう作業はアクセスのSQLでも使わないと難しい。 また顧客IDが無いので、問題を難しくしている。 これらは仕事関係のエクセルの利用のケースで、私の持論の、エクセルは仕事に使うにはVBAのプログラムを組めることが必要という持論に当てはまるケースだ。 >頻繁に行う作業なので 内容から、年度ごとのデータと思うが、頻繁とは? ーー また目的が、Sheet2008に営業マンの氏名を入力するのか、紙ベースに なっている帳票に書き込むのか。 ーー 氏名だけでマッチングしてもよいと思うが、念入りにやるには、2007年シートで、氏名+電話番号列でソートし、同じヒトと判断!する人を抜き出す。 それ以外は別人。別人には佐藤 一郎1(2,3・・)とサブ番号つきに手作業で直す。1万人程度だと、同姓同名はそんなに多く出ないと思う。 重複分なども判断して削除する。 ーー 同じく2008データについても、同じ作業をして、2007のデータとその処理を参考に生かして、同姓同名分をサブ番号つきに直す。 これで両者VLOOKUP関数(またはMATCH関数が使える土台が出来たことになる。 ーーー VLOOKUP関数をシートに入れる(式を複写する)のは、手数と、メモリを食うので下記のVBAで処理するのも一案。 ーー ALT+F11キー メニュうーの 挿入ー標準モジュール この 標準モジュールの画面に、下記を貼り付け。 Sub test02() On Error GoTo err1 d = Worksheets("Sheet1").Range("B65536").End(xlUp).Row For i = 2 To d x = WorksheetFunction.Match(Worksheets("Sheet1").Cells(i, "B"), _ Worksheets("Sheet2").Range("B1:B20000"), 0) On Error GoTo err1 Worksheets("Sheet1").Range("D" & i) = Worksheets("Sheet2").Range("D" & x) GoTo p1 err1: Worksheets("Sheet1").Cells(i, "D") = "NF" p1: Next i End Sub 実行はVBE画面でF5キーを押す。 列がB,Dの文字を使っているところなので、実情に合わせて修正にこと。 ------------ 質問者の場合に合わせての列などの修正は下記と比べて考えてください。 データ Sheet2 (2007年は) 電話 氏名 住所 担当 011-231-1112 佐藤 一郎 北海道札幌市中央区北1-1-1 鈴木 011-231-1113 近藤 一郎 北海道札幌市北区北1-1-2 山田 011-231-1115 木村 健 秋田県秋田市紙町23 鈴木 Sheet1 (2008年は) 電話 氏名 住所 担当 011-231-1113 近藤 一郎 北海道札幌市北区北1-1-2 ○○ 011-231-1115 木村 健 秋田県秋田市紙町23 ○○ 011-231-1112 佐藤 一郎 北海道札幌市中央区北1-1-1 ○○ 011-231-1114 北野 太郎 青森県青森市北島1-34 ○○ となっていて、○○のところ絵担当者を入れることを考えている。 実行結果は Sheet1 電話 氏名 住所 担当 011-231-1113 近藤 一郎 北海道札幌市北区北1-1-2 山田 011-231-1115 木村 健 秋田県秋田市紙町23 鈴木 011-231-1112 佐藤 一郎 北海道札幌市中央区北1-1-1 鈴木 011-231-1114 北野 太郎 青森県青森市北島1-34 NF ーーーー 重複氏名行は 電話 氏名 住所 担当 011-231-1113 近藤 一郎 北海道札幌市北区北1-1-2 山田 011-231-1115 木村 健 秋田県秋田市紙町23 鈴木 1 011-231-1112 佐藤 一郎 北海道札幌市中央区北1-1-1 鈴木 1 011-231-1114 北野 太郎 青森県青森市北島1-34 NF 木村 健 1 佐藤 一郎 1 F2に =IF(COUNTIF($B$2:$B$20000,B2)=1,"",1) と入れて下方向に式を複写。F列+氏名で並べ替え。 上の方の行に重複氏名が出るので、その他住所情報などで、同姓同名の別人か、同一人か判断!や調査する。

pecopocori
質問者

お礼

丁寧に解説いただきありがとうございます! さっそくVBAでも実行してみて、処理できました。ご指摘のとおり顧客IDが無いので、それぞれのシートでサブ番号つきに手作業で直すのが、面倒でも近道かもしれませんね。

関連するQ&A

  • エクセルで照合したデータのコピペ

    照合したエクセルデータ結果を別シートにコピペする方法を教えてくだ さい。 【設問】 エクセル1には A列に電話番号が100件入っています。 エクセル2には A列に電話番号が100件B列に住所が100件 入っています。 電話番号の 内容は一緒ですが、エクセル1と2では並び方が違います。 VLOOKUP関数を使って、エクセル1の電話番号に対応する住所情報を記 入しました。 私用した関数は下記の通りです。 =IFERROR(VLOOKUP(A1,[Book2.xlsx]Sheet1!A:B,2,FALSE),"該当なし") その住所情報を別のエクセルシート3にコピペする方法を教えてくださ い。

  • 別シートのデータを抽出して並べ替えたい

    シート1のA列だけに1行飛ばしで名前、住所、電話番号のデータが入っています。ついでに、次の情報との間は2行飛ばしになっています。    A         B ―|―――――|―――――― 1|名前a  | 2|     | 3|住所a  | 4|     | 5|電話番号a| 6|     | 7|     | 8|名前b  | といった感じです。 このデータを下のように、シート2に綺麗に並べ替えたいのですが…     A      B         C ―|―――――|―――――|―――――――| 1| 名前a | 住所a | 電話番号a | 2| 名前b | 住所b | 電話番号b | 3| 名前c | 住所c | 電話番号c | ひとつずつコピペで移そうと考えていたのですが、データが何百件と増えてしまったため困っています。 簡単にできる方法があれば教えてください。 よろしくお願いします。

  • エクセル 複数シートのデータをまとめたい

    他の質問を参照したのですが、できないのでお願いします。 新しいシート(ブックでもいいです)に次のデータを ひとまとめにしたい。 外国語テストのデータです。 (1)ひとつのブックにシートが十枚ある (2)列a2~h2 行2~29までデータがある。 (3)列a番号(a2が1、a29が28)  列b空欄  列c日本語  列d外国語 この構造を倍にしているのでa~hにデータが並んでいる。 これを、 つまり、8×28のデータが各シートにあるわけですが 【ひとつ】 できればシート1のデータの下 29行目からシート2のデータ、58行目からシート3… というように並べたい。 【ふたつ】 更にできるならa~dの下にe~hを持ってきて 4×56の並びにして 57行目からシート2のデータ…というように並べたい。 データの並びは列a列eの番号順を保持できたらうれしいです。 どうぞよろしくお願い致します。

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

    エクセルのデータ照合の仕方 仕事でデータの照合をしたいのですが・・・今現在紙ベースで合していて大変です。 こちらが把握している事務データと営業さんがあげるデータを照合したいのです。 A列商品名 B列数量 C列金額 D列合計金額(数式C*D)となります。 例えばこちらが A ビール B 10 C 300 D 3000 と打ち込みます。 営業さんも    A ビール B 10 C 300 D 3000 と打ち込むとデータが表示されないようにしたい。 こちらが     A ビール B 10 C 300 D 3000と打ち込み、 営業さんが   A ビール B 5 C 300 D 1500           A ビール B 5 C 300 D 1500           とこちらが1行営業さんが2行打ち込んでも品名があっていて合計金額もあっているのでデータが表示されないようにしたい。 こちらが     A ビール B 10 C 300 D 3000と打ち込み、 営業さんが   A ビール B 10 C 500 D 5000 と合計金額が違うのでこちらのデータも営業さんのデータを表示させたい。 間違い探しをしたいのです。 営業さんがこちらのデータ合わせて打ち込んでくれれば、一番良いのですが・・・そうもいかずに困っています。 こんな都合の良い照合の仕方ってありますかね?

  • エクセルのデータ加工

    エクセルのセルで、縦に1行目名前A、2行目住所A、3行目電話番号A、4行目名前B、5行目住所B、6行目電話番号B・・・、という具合に並んでいるデータを横に1列目1行目名前A、1列目2行目名前B、2列目の1行目住所A、2列目の2行目住所B、3列目の1行目電話番号A、3列目の2行目電話番号B、という風に加工したいのですが、一つ一つセルを移動するのではなく、なにか良い方法はありませんでしょうか?ちなみにデータは1000件ほどあるのですが。

  • sheet2からsheet1へのデータの飛ばし方(エクセル関数)

    Sheet1 A  B C D E (列) ―――――――――――――――――――――――― 1| 番号  氏名   所属  入社  生年月日 2| 1000  斉藤   東京  10/4  (入力箇所) sheet2 A B C D (列) ――――――――――――――――――― 1| 番号  氏名  所属  生年月日 2| 1000  斉藤  東京  1988/11/1 sheet1のE行(生年月日)にsheet2を参照し、同じ番号の人の生年月日が表示されるようにしたいのですが、どのような式(関数)を入れたら表示されるでしょうか? ほかの似たような質問の解答を見てMatchやvlookupを使ってみましたが、できなかったので教えてください。 よろしくお願いします。

  • excelでデータを別シートに引っ張ってきたい

    excelで値を検索し、返す時、返す値の横にあるデータを違うシートのセルの下に一緒に引っ張ってきたいときの関数(方法)を教えてください。 素人なので分かりにくいと思いますが、お知恵をお借りしたいと思います。 あるデータのシートの検索値を別シートに持ってきたいのですが、シート1をシート2のようにしたいのです。 /は空白 例)シート1 /A B C D E 1(1) □ ○ ▽ ◎ 2 (2) ▼ ■ ◇ ◎ シート2 / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 分かりにくいかもしれませんが、 シート1の(1)(A1)を検索すると、シート2(B1)に□(これはVLOOKで引っ張ってこれるのはわかります。) 次にシート1の(C1)○をシート2の(B2)へ持ってきたいのです。シート1(D1)(E1)はシート2の(C2)(D2)へ。 しかもシート1のC列は空白セルもあり、シート1のC列が空白の場合、下にずれることなくシート1の(D1)(E1)はシート2の(C1)(D1)へ。下記<図a>のようになるようにしたいのです。 そして、シート2のA列に検索値として入力する(1)や(2)の値は連番ではなく、(2)の次に(5)に飛んだりします。(2)の行のC列にデータがあっても、(5)のC列にデータはないこともあります。<図b> <図a> /A B C D 1 (1) □ ▽ ◎ 2 (2) ▼ ◇ ◎ <図b> / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 5 (5) □ ▽ ◎ 6 (7) ▼ ◇ ◎ vlookとかCLUMN関数とか考えてはみたのですが、どうもうまくいきません。 毎回作成するデータなのですが、毎回コピペで作成しています。 とても面倒なので(1)を検索したらデータが一瞬で検索できるようにしたいと試みてはみたものの、私の知識では不可能でした。 関数では無理なのでしょうか。。。 関数はあまり詳しくないので分かりやすい方法があれば、教えていただければ助かります。 関数に詳しい方、よろしくおねがいいいたします。 関数にはこだわっていません。違う方法があればそれも含めておねがいいたします。

  • エクセル 複数シートのデータを一つにまとめる

    エクセルに関してお知恵を拝借願えれば幸いです。 一つのファイルに多数の(30~96)シートが存在している エクセルデータがあります。 これらを加工しやすいようにしたいと考えております。 内容としては、 シート1~シート3までは、 同じA列に対し、違う内容が示されており(※1)、 (※1) シート1 A列    B列   C列・・・ 名前α  年齢  住所・・・ シート2 A列    B列   C列・・・ 名前α  血液型 趣味・・・ シート3 A列    B列   C列・・・ 名前α  特技  好物・・・ シート4以降は3シートずつ上記のA列が変わっていきます。(※2) (※2) シート4 A列    B列   C列・・・ 名前β  年齢  住所・・・ シート5 A列    B列   C列・・・ 名前β  血液型 趣味・・・ シート6 A列    B列   C列・・・ 名前β  特技  好物・・・ 作業としては二つあり、 作業1:3つのシートに分かれているデータを先頭のシートに一つにまとめる (シート1) A列    B列   C列   D列   E列   F列   G列 名前α  年齢  住所   血液型  趣味  特技  好物 (シート2) A列    B列   C列   D列   E列   F列   G列 名前β  年齢  住所   血液型  趣味  特技  好物 作業2:上記を一つのシートにまとめる (シート1) A列    B列   C列   D列   E列   F列   G列 名前α  年齢  住所   血液型  趣味  特技  好物 名前β  年齢  住所   血液型  趣味  特技  好物 A列の名前の数が違っていたりして、単純に作業記録のやり方のマクロでは うまくいかず、これらを可能とするマクロについてご助言願えれば幸いです。 よろしくお願い致します。

  • エクセルで複数シートに記載のデータを集計する方法

    エクセルで下記【各シート】のように複数のシート毎にデータが記載してあり、これを【集計イメージ】のようにひとつのシートにまとめたいと思っています。  【各シート】〔※記載している各項目・列の配置は同じ。但し、記載している行がばらばらです。〕  < Sheet1 >  < Sheet2 >  < Sheet3 > ・・・・<Sheet50>    A : B     A  : B     A : B  1名前:田中  1住所:大阪  1性別:男  2住所:東京  2名前:佐藤  2名前:山田  3性別:男    3性別:女    3住所:群馬  【集計イメージ】  <      集計シート      >    A     : B : C  : D  1シート番号:名前 :住所 :性別  2    1   :田中 :東京 :男  3    2   :佐藤 :大阪 :女  4    3   :山田 :群馬 :男    ・    ・ そこで、各シートの行が順序ばらばらになっているため、シート名に連続性(Sheet1・Sheet2・Sheet3・・・・SheetNのようにシート番号のみかえる形)を持たせたうえで、以下の式のようにVLOOKUP関数にて各項目を検索し、オートフィルにてすべての各シートの値を集計しようとしたのですが、#valueエラーが出てしまい上手くできません。   【式 B2=VLOOKUP("名前","Sheet"&$A2&"!1:65536",2) 】 ここで、ご質問なのですが、  (1)恐らく、範囲("Sheet"&$A2&"!1:65536")が間違っているのだと思いますが、どのように修正すればよいでしょうか?  (2)また、VLOOKUP関数の他に良い方法がございましたら、合わせて教えていただければ助かります。 よろしくお願いします。

  • データ照合の仕方

    過去のデータと最新のデータを照合し、一致する場合は最新のデータ上に過去データの情報を 表示させたいです。 1.過去シートはA列に電話番号/B列に名前があります。 2.最新シートはA列に電話番号のみがあります。 →最新シートのA列の電話番号と過去シートのA列の電話番号を照合し、一致した場合は  最新シートのB列に名前を表示させたいです。 よろしくお願いします。

専門家に質問してみよう