• 締切済み

エクセルで別シート同士の照合結果を抽出

シート1(担当者アの案件): A列に会社名 B列に担当者名 シート2(担当者イの案件): A列に会社名 B列に担当者名 シート3(担当者未定の案件): A列に会社名 B列に担当者名 シート4 シート1とシート3を照合して、シート1に存在する場合、シート4に抽出 シート2とシート3を照合して、シート1に存在する場合、シート4に抽出 としたいのです。やり方を教えていただけますでしょうか。 ちなみに結果の抽出はシート4でなくてもどこでもいいのです。 お手数ですがよろしくお願いいたします。

みんなの回答

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

ANo1.merlionXXです。 > VBAが全くわからないので、シート名の応用がきかず、わかりませんでした。 シート1からシート4とお書きのシート名はそれぞれ、Sheet1~Sheet4ではなかったということですね。 では、わかりやすくシート1やシート4と書き直しますので、そちらで本当の名前に書き変えて実行してみてください。 以下のコードの  Sheets("シート1")  を、Sheets("ほんとの名前")  のように " と " に囲まれた部分を直します。 A列B列ともに一致したデータを対象にします。 データは1行目からあるものとします。 手順 1.エクセルの画面で、AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。 2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピペします。 '********これより下********** Sub test02()   Dim ws(1 To 4) As Worksheet   Dim myV1, myV2, myV3, myW   Dim i As Long, n As Long, j As Long      Set ws(1) = Sheets("シート1")   Set ws(2) = Sheets("シート2")   Set ws(3) = Sheets("シート3")   Set ws(4) = Sheets("シート4")      myV = ws(1).Range("A1", ws(1).Cells(Rows.Count, "B").End(xlUp)).Value   myV2 = ws(2).Range("A1", ws(2).Cells(Rows.Count, "B").End(xlUp)).Value   myV3 = ws(3).Range("A1", ws(3).Cells(Rows.Count, "B").End(xlUp)).Value   ReDim myW(1 To UBound(myV3), 1 To 2)   For i = 1 To UBound(myV)     For n = 1 To UBound(myV3)       If myV(i, 1) & myV(i, 2) = myV3(n, 1) & myV3(n, 2) Then         j = j + 1         myW(j, 1) = myV3(n, 1)         myW(j, 2) = myV3(n, 2)         Exit For       End If     Next n   Next i   For i = 1 To UBound(myV2)     For n = 1 To UBound(myV3)       If myV2(i, 1) & myV2(i, 2) = myV3(n, 1) & myV3(n, 2) Then         j = j + 1         myW(j, 1) = myV3(n, 1)         myW(j, 2) = myV3(n, 2)         Exit For       End If     Next n   Next i   ws(4).Range("A:B").ClearContents   ws(4).Range("A1").Resize(UBound(myW), 2).Value = myW End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります。 4.Alt+F8キーで出てきたマクロ名(test02)を選択して実行します。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

シート1:ア担当 A社 担当 田中様 B社 担当 加藤様 C社 担当 青木様 シート2:イ担当 C社 担当 伊藤様 D社 担当 山本様 F社 担当 林様 シート3:担当未定 B社 担当 加藤様 E社 担当 松本様 とあれば一つのシートにまとめる。 シート5 シート1の分 A社 担当 田中様  ア担当 シート1の分 B社 担当 加藤様  ア担当 シート1の分 C社 担当 青木様  ア担当 シート2の分 C社 担当 伊藤様  イ担当 シート2の分 D社 担当 山本様  イ担当 シート2の分 F社 担当 林様   イ担当 シート3の分 B社 担当 加藤様  担当未定 シート3の分 E社 担当 松本様  担当未定 シート5の並べ替え A社 担当 田中様  ア担当 B社 担当 加藤様  ア担当 B社 担当 加藤様  担当未定 C社 担当 青木様  ア担当 C社 担当 伊藤様  イ担当 D社 担当 山本様  イ担当 E社 担当 松本様  担当未定 F社 担当 林様   イ担当 シート5の並べ替え A社 担当 田中様  ア担当    A社はシート1のみに存在 B社 担当 加藤様  ア担当 B社 担当 加藤様  担当未定   B社はシート1と3に存在 C社 担当 青木様  ア担当 C社 担当 伊藤様  イ担当    C社はシート1と2に存在 D社 担当 山本様  イ担当    D社はシート2のみに存在 E社 担当 松本様  担当未定   E社はシート3のみに存在 F社 担当 林様   イ担当    F社はシート2のみに存在 とりあえず、 こういうことで対応かと思いましたがどうでしょう。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

確認事項。 >シート1とシート3を照合して、シート1に存在する場合、シート4に抽出 >シート2とシート3を照合して、シート1に存在する場合、シート4に抽出 「照合」「存在」 これに含まれる意味をもっと明確にしないとマクロでは実現できません。 シート1とシート3を比較して、 あ:「会社」の値がシート1とシート3ともに同じ記載がある場合、 い:「会社」の値がシート1にしか記載がない場合、 う:「会社」の値がシート3にしか記載がない場合、 「シート1に存在」というだけでは、「あ」でもあるし「い」でもあるので 誤解を招きます。 >シート2とシート3を照合して、 「シート1とシート3を比較して、」とあるので、 同じ記載をしていないか、が目的で、 しているものとしていないものとを区別つけておきたい ということだと解釈します。 シート4に残したいのは、重複分なのか、まだ担当未定のものなのか、 シート1とシート2を照合する必要はあるのかないのか。 >シート2とシート3を照合して、シート1に存在する場合、シート4に抽出 記載から察すると 「シート2とシート3を照合して、シート2に存在する場合、シート4に抽出 」 と想定される。 効率のいい比較のやり方さえわかれば、各判断方法や転記方法はなんとかなります、 というのであれば、ここの記載誤りはさほど問題ではないかも。

oshiete8
質問者

お礼

すみません。理解できず、挫折しました。 ありがとうございました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

担当ウが発生すると仕組みが崩れるでしょうから、VBAがわからないなら手作業。 すべてのシートにシート名、連番を準備します。 すべてのシートをとあるシートにまとめます。 会社、シート名、連番 で並び替えをします。 ここで 3行あればシート1も2も3も存在するデータ、2行あれば、1行しかなければ、と判断できるでしょう。数式で2つ上のセルを見ます。 印がつけれたらフィルターを使えばシート4にまとめます。 マクロやVBAをしらなくても少し手間かけるとできそうです。

oshiete8
質問者

お礼

すみません、理解できませんでした。。。 ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

どのシートもA1セルに「会社名」,B1セルに「担当者名」と同じ内容で記入されているとします。 ご利用のエクセルのバージョンが明記されていないので,2003(以前)でご説明します。 ご質問2段目の >シート2とシート3を照合して、シート1に存在する場合、シート4に抽出 イミフメイなのでこれはスルーして,シート1にあるシート3をシート4を抽出する手順をお話しします。 手順: 書き出し先とするシート4を開く(<ここから始めることが必須) データメニューのフィルタから「フィルタオプションの設定」を開始する (オートフィルタのオプションではないので間違えないこと) 添付図を参考に  指定した範囲にマーク  リスト範囲はオリジナルデータのシート3のデータ範囲を指定  検索条件範囲は抽出条件となるシート1のデータ範囲を指定  抽出範囲は書き出し先となるシート4のA1を指定 してOKします。

oshiete8
質問者

お礼

すみません、手順どおりにやったのですが、できませんでした。 シート3のデータがそのままシート4に出てしまいました。 ありがとうございました。

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

シート1からシート4とお書きのシート名はそれぞれ、Sheet1~Sheet4だとします。 A列B列ともに一致したデータを対象にします。 データは1行目からあるものとします。 VBAでの手法です。 手順は以下のとおりです。簡単ですよ。 1.エクセルの画面で、AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。 2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピペします。 '********これより下********** Sub test01()   Dim ws(1 To 4) As Worksheet   Dim myV1, myV2, myV3, myW   Dim i As Long, n As Long, j As Long   For i = 1 To 4     Set ws(i) = Sheets("Sheet" & i)   Next i   myV = ws(1).Range("A1", ws(1).Cells(Rows.Count, "B").End(xlUp)).Value   myV2 = ws(2).Range("A1", ws(2).Cells(Rows.Count, "B").End(xlUp)).Value   myV3 = ws(3).Range("A1", ws(3).Cells(Rows.Count, "B").End(xlUp)).Value   ReDim myW(1 To UBound(myV3), 1 To 2)   For i = 1 To UBound(myV)     For n = 1 To UBound(myV3)       If myV(i, 1) & myV(i, 2) = myV3(n, 1) & myV3(n, 2) Then         j = j + 1         myW(j, 1) = myV3(n, 1)         myW(j, 2) = myV3(n, 2)         Exit For       End If     Next n   Next i   For i = 1 To UBound(myV2)     For n = 1 To UBound(myV3)       If myV2(i, 1) & myV2(i, 2) = myV3(n, 1) & myV3(n, 2) Then         j = j + 1         myW(j, 1) = myV3(n, 1)         myW(j, 2) = myV3(n, 2)         Exit For       End If     Next n   Next i   ws(4).Range("A:B").ClearContents   ws(4).Range("A1").Resize(UBound(myW), 2).Value = myW End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります。 4.Alt+F8キーで出てきたマクロ名(test01)を選択して実行します。

oshiete8
質問者

お礼

すみません、VBAが全くわからないので、シート名の応用がきかず、わかりませんでした。 ありがとうございました。

関連するQ&A

  • エクセルの照合についてです。

    関数を全く知らない素人で恐縮ですが、ご教授くださると幸いです。 アとイ2つのシートが別々のファイル内にあり、両シートのCDE列には2桁から4桁までの数値が 各々ランダムに300行ほど入ってます。 例     【アのシート】             【イのシート】   A  B  C  D  E       A  B  C  D  E                1       400 1200 60     1        200  30 600 2        50 800 200    2        1700 800 400 3      1900 300 500    3         900 600  10 そこで、アの各行に「イのCDE列と全て同数もしくはプラス、マイナス5以内までの行があるか」を照合したいものの、他にもシートが多く困っています。 希望(1) 「アの1行目:イの1行目」を比較するのではなく「アの1行目:イの全行」を比べたいです。 希望(2) 『イのシートから、CDE列セットで全てが±5以内の行』を探したいです。 希望(3) 上記アの1行目だと「C 395,D1204,E58」は適合しますが、       同数であっても「 C1204,D 395,E58」はCとDが逆なので不可です。       もちろん「C395,D1204,E66]も不可です。Eがプラス6なので。 希望(4) 結果はアのシート内P列に反映させたいと思います。 大変恐れ入りますが、よろしくお願い申し上げます。m(_ _)m

  • エクセルシート間の照合について

    エクセルシート間で照合をしたいと思っています。 照合する項目は2つ。2つともあえばそのA列のデータを表示するというものです。 データは シート1(前年) A  B  C  D 1  田中 123 東京都・・ 5  佐藤 124 千葉県・・ 3  山本 128 埼玉県・・ シート2(今年) A  B  C  D   山本 128 埼玉県・・   佐藤 124 北海道・・   田中 123 東京都・・ C列とD列を照合し2つともあえばシート2のA列にシート1のA列のデータを入力する。なければ「なし」と入力できるようにしたいのです。 上の場合は山本のA列に「3」佐藤には「なし」田中には「1」と入るのうになればと思います。 入力されている列は同じですが順番はばらばらです。データ数は1万件を超えています。 どなたかアドバイスいただければと思います。よろしくお願いします。     

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

  • エクセル(マクロ?)の照合についてです。

    関数やマクロを全く知らない素人で恐縮ですが、 ご教授くださると幸いです。 アとイ2つのシートがあり、両シートのCDE列には2桁から4桁までの 数値が各々ランダムに300行ほど入ってます。 そこで、アの各行に「イのCDE列と全て同数もしくは プラス、マイナス5以内までの行があるか」を照合したいものの、 他にもシートが多く困っています。 ※このような作業はエクセルだと無理でしょうか? 大変恐れ入りますが、よろしくお願い申し上げます。

  • Excelでの文字列抽出

    Excelで文字列の抽出とそれを並べる方法を教えてください。 関数だけを用いて実現できるのか、マクロを使わなければできないのかも分かりません。 この関数をこの様に使えばよいというのを教えていただけると幸いです。 やりたいことは、下記条件で、シート2のB列にシート1のG列~P列までに登録されている担当者名に該当するB列の店名を4店まで抽出したいのです。 分かりづらくて申し訳ございませんが、よろしくお願い致します。 ------------------------ シートが2枚(シート1/シート2)あります。 シート1  B列は4行毎に結合されており、店名が登録されています。  G列~P列までは1行目は担当者名、2,3,4行目は補足情報が登録されています。  シート2  A列に担当者名が入っています。(4行毎に結合しています)  B列にA列の担当者名に該当する、シート1の店名を4店まで登録したい。

  • エクセル 別シートから一覧を抽出したい

    部品一覧表を作成しているのですが、2シートあり 1入力シート・2部品コードシートとあります。 部品コードシートにはB列に部品番号・C列部品名・D列部品番号・E列部品名と2行ずつ使い番号・品名がB~Wまで47行分入力されています。 B1:C47、D1:E47…と2列47行にはそれぞれ【A】、【B】、…とセルの名前の定義をつけました。現在【H】までありますが、今後増える可能性があります。 入力シートに、セルの名前を指定したときに部品コードのシートから 一覧を抽出したいのですが、どの関数を使えばよいのかわかりません。 入力シート                 |部品コードシート G   H                  | A Bコード C部品名  Dコード E部品名 4式入力用にあけています。     |1 1800  ユニットA   1501 電源A 5コード 部品名             |2 1801  ユニットB   1502 電源B 6                       |3 G4に関数を入れてG6~G52まで部品コードのシートA1~A47を一気に表示 させたいのです。部品コードシートの行数が変わることはありません。 マクロを使わないと、関数では難しいでしょうか?

  • エクセル 自動で抽出と集計

    現在エクセル2007です sheet1には a列に会社名b列に担当者名が入ってます sheet2に来社数を数えたいのです 沢山の会社名と同じ会社名でも個人名が違うのでオートフィルタなど設定では表を作成したり数を数えるのが出来ません 希望は自動でsheet2に会社名一覧が出来 (新しい会社名や担当者がsheet1に入力されたら新規で一覧に入る) 何処の会社の担当者さんが何回来たというのを抽出し合計回数を表示したいです 全く分かりません ネットで調べても複数条件で抽出しても自動転記や回数を数えるまで出ておらずお手上げです どなたか教えて下さい

  • エクセルで検索して別シートに抽出したい

    エクセル2003で顧客リストを作成しています。 そのリストの中から特定の文字列を検索し(あいまい検索)、その項目が含まれる行ごと 別シートに抽出をしたいです。 ほかの方のご質問も参考に試してみたのですが、上手くいきません。 1行目に各項目名 A日付 B担当1 C担当2 D管理番号 E顧客名 2行目からデータです。 ほぼ担当1か顧客名で検索し、検索結果は複数になることがほとんどです。 どなたかよろしくお願いいたします。

  • エクセルで照合に適切な関数を教えてください。

    すっごく困っているのでよろしくお願いします。 sheet1・・・Aの情報  sheet2・・・Bの情報 sheet3・・・二つの照合結果 A・Bはそれぞれ入力件数、並び順(行・列)もまったく違います。 例) sheet1・sheet2  A列・・・都道府県  B列・・・市区  C列・・・町 件数は同じ東京都○○区でもC列の町名が違った場合は、複数件になります。

  • EXCEL - マクロ・シート間の照合

    すみません、どなたか教えてください。 「シートA」と「シートB」とで、商品リストのデータを照合したいのです。 「シートA」を元に、ある一部の商品リストに変更をかけたものが「シートB」になります。 【例】 商品番号  商品名  001     Orange ABC  002     Orange BBB  003     Apple Big  004     Banana 5 チェックする点は、入力されている文字列、大文字、小文字、スーペース等が変更になったかどうかチェックします。 変更は何度も入るため「シートB」を元に「シートC」をチェックする→「シートC」を元に「シートD」をチェックする、という流れになっていきます。 今までは以下の関数を使ってチェックしていましたが、この関数だと毎回書き変える上に、A3以降のセルにコピーする作業が発生するので手間がかかってなりません。 ●照合用のシートZ!A2=IF('シートA'!A2&'シートB'!A2="","",EXACT('シートA'!A2,'シートB'!A2)) どなたかよい方法を教えてください。よろしくお願いします。 できれば、ボタンを押してマクロ実行、というのが理想なのですが…。

専門家に質問してみよう