• ベストアンサー

複数のワークシートから条件付のデータの抽出

複数のイベントの参加者データから、誰がどのイベントに最初にエントリーしたかを調べようと思っています。 同一イベントの中でもエントリー日は異なります。 ワークシート1 イベントA エントリー日 参加者A 参加者A電話番号 参加者Aメアド イベントA エントリー日 参加者B 参加者B電話番号 参加者Bメアド イベントA エントリー日 参加者C 参加者C電話番号 参加者Cメアド ・ ・ となっており、ワークシート2にイベントB、ワークシート3にイベントCとなっておりそれぞれのイベントには1回~いくつでも参加可能で、10イベントほどあります。1つのイベントの別日程への参加はNG。 まず、ある日のイベントAに参加した参加者A(ある行)が、 他のイベント(別ワークシート)にも参加したかどうかをまず 調べたいのですが、その場合、必ずしも他のイベントでも確実に名前、 電話番号、メアドと3つを取得しているとは限らないので、 3つの要素のうち、2つ以上が合致していれば同一人物とみなそうと 思っています。 そして、同一人物とみなしたあとで、それぞれのイベントへの エントリー日同士を比べて、そのイベントよりも若い日程(古い日程) で参加しているものが1つもなければ、そのレコードを○にする、 というような処理をしたいのですが。。。 さらに理想というか欲をいうと、上記の処理を元に       最初にエントリしたイベント 次にエントリーした ・・ 参加者名  イベントD          イベントZ     ・・ 参加者名  イベントE          イベントC     ・・ みたいなリストが作れると一番いいのですが。。。 とてもわがままな質問で大変恐縮ですが、よろしくお願いいたします。

  • xbee
  • お礼率33% (1/3)

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

実に複雑で様々な要望ですのでたくさんの作業列を作って対応することになるでしょう。 たくさんのシートがありますが初めにそれらのシートのデータを一つのシートにコピーして貼り付けることですね。 例えばシート1に貼り付けたとします。 シート1では1行目に項目名があり2行目からデータがあるとして、A列にはイベントの種類、B列には日付、C列には名前、D列には電話番号、C列にはメアドがあるとします。 すべてのデータをシート1にはる付けた後で日付を重点に昇順での並べ替えをします。 同一人物かどうかの判断は名前と電話番号あるいは名前とメアドが一致していれば同一人物として扱うことにします。実はこれ自体複雑な操作です。 H2セルには次の式を入力します。 =C2&D2 I2セルには次の式を入力します。 =C2&E2 J2セルには次の式を入力します。 =IF(C2="","",IF(OR((COUNTIF(H:H,H2)+COUNTIF(I:I,H2))>1,(COUNTIF(H:H,I2)+COUNTIF(I:I,I2))>1),C2&"同一",C2&"別人")) K2セルには次の式を入力します。 =J2&A2 L2セルには次の式を入力します。 =IF($C2="","",IF(AND($F2="○",COUNTIF($J$2:$J2,$J2)=1),$C2&"/"&COUNTIF($L$1:$L1,"?*")+1,"")) M2セルには次の式を入力します。 =IF($C2="","",IF(AND($F2="○",COUNTIF($J$2:$J2,$J2)>1),$J2,"")) H2セルからM2セルを選択してから下方にオートフィルドラッグします。 F列にはお求めの○やNGを表示するためにF2セルに次の式を入力して下方にオートフィルドラッグします。 =IF(C2="","",IF(COUNTIF(K$2:K2,K2)>1,"NG","○")) 次に理想の表をシート2に作成することにします。 シート2のA2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ISERROR(INDIRECT("Sheet1!C"&MATCH("*/"&ROW(A1),Sheet1!$L:$L,0))),"",INDIRECT("Sheet1!C"&MATCH("*"&ROW(A1),Sheet1!$L:$L,0))) B列には最初にエントリーしたイベントをC列には次にエントリーしたイベントを表示させるために、B2セルには次の式を入力します。 =IF(ISERROR(INDIRECT("Sheet1!A"&MATCH("*"&ROW(B1),Sheet1!$L:$L,0))),"",INDIRECT("Sheet1!A"&MATCH("*"&ROW(B1),Sheet1!$L:$L,0))) C2セルには次の式を入力します。 =IF(ISERROR(INDIRECT("Sheet1!A"&MATCH(INDIRECT("Sheet1!J"&MATCH("*"&ROW(C1),Sheet1!$L:$L,0)),Sheet1!M:M,0))),"",INDIRECT("Sheet1!A"&MATCH(INDIRECT("Sheet1!J"&MATCH("*"&ROW(C1),Sheet1!$L:$L,0)),Sheet1!M:M,0))) B2およびC2セルを選択してから下方にオートフィルドラッグします。 最後に作業列が目障りでしたら列を非表示にすればよいでしょう。

xbee
質問者

補足

詳細にありがとうございます(TT ひとまず、理想の表の前のところまでがんばっているのですが リストの中に、同一人物がいるのか判定している =IF(C2="","",IF(OR((COUNTIF(H:H,H2)+COUNTIF(I:I,H2))>1,(COUNTIF(H:H,I2)+COUNTIF(I:I,I2))>1),C2&"同一",C2&"別人")) ですが =IF(C2="","",IF(OR((COUNTIF(H:H,H2))>1,(COUNTIF(I:I,I2))>1),C2&"同一",C2&"別人")) 単純にこれではダメなのでしょうか? また、その次のL2には、名前/(数字)がでて、途中までしか出ず、 M2は何も表示されません。処理しているロジックが分からない (どうしてこういう式になるのか読み解けていな)ので 追えてない状況です(すいません) 引き続きがんばります(もしご教示いただけると幸いです)

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

解答No2です。 J2への入力の式はよく考えれば電話番号とメアドは明らかに違っていますし電話番号欄にメアドが、あるいはメアドの欄に電話番号が記載されるなどのことが無い限り、あなたの式で十分でしょう。 L列やM列で空白の行ができるようにわざとしています。これらの列はシート2を作る際に必要と判断して作成しています。

xbee
質問者

お礼

ありがとうございます! なんとか、明日の提出に間に合いそうです。大変ありがとうございました。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

VBAでプログラミングすれば可能ですが、仕様があいまいですね。 3つの要素のうち、2つ以上が合致していれば同一人物とみなすとありますが、 ・3つとも入力されている場合でも2つ合致すれば同一とみなすのか。 ・1つしか入力されていない場合はどういう場合に同一とみなすのか。 ・1つのイベントの別日程への参加はNGとあるが、同じイベントの中で2つ合致したと場合でも別人とするのか。 ・2つ合致した人が他のイベントに2人いたらどうするのか。 などなど、明確にしなければならない点がいくつもあります。(上記の4点だけではありません) そこらへんをきちんと決めてから質問してはどうですか。

xbee
質問者

補足

回答、ありがとうございます おっしゃるとおり、仕様があいまいな部分があり申し訳ありません。 データをすべて目視したわけではないので、あくまで、データ収集時 に、1イベントの中に、2つ以上合致するレコードが2人以上は「ない」 という仕様で、合致した人が1人でもいれば、エントリー日と比較して 次のイベントへいってしまう、という「わりきり仕様」で考えて おりました。 また、VBAは触った事が無いのですが、どの程度のステップ数、 習熟度で、実現ができるかわからないのですが、Excelの関数だけでは 限界な気はするので、VBAのことも調べてみようと思います。

関連するQ&A

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

    シート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 | ひとつずつコピペで移そうと考えていたのですが、データが何百件と増えてしまったため困っています。 簡単にできる方法があれば教えてください。 よろしくお願いします。

  • EXCEL ワークシート間のデータ比較

    EXCELのワークシート間のデータ比較について教えて下さい。  A.XLSとBワークシート(新)とCワークシート(旧)の特定の列のデータを比較したいと思っています。  Bワークシート(新)とCワークシート(旧)の比較に関して Bワークシート(新)には、Cワークシート(旧)のデータと比較すると 一致するもの、追加されたもの、削除されたものが含まれています。  Bワークシート(新)の値をCワークシート(旧)の値を全て比較すると頭では分かっているのですが、関数のみの機能で対応できませんか?

  • 条件にあったデータを抽出する関数またはマクロ

    エクセルの関数またはマクロで以下のようなことをしたいと思っています。以下のような表を「Sheet1」に作成しています。 A社 住所1 電話番号1 B社 住所2 電話番号2 C社 住所3 電話番号3 D社 住所4 電話番号4 「Sheet2」にて、A1に“A社”と入力すると、B1に住所、C1に電話番号が表示されるようにしたいのです。INDEXやVLOOKUPなどでやってみたのですが、うまくいきません。ご指導をお願いいたします。

  • オートフィルタを使わず条件抽出

    オートフィルタを使わず条件抽出をしたいのですが数式がわかりません。(Accessを使えばよいのですが会社からNGがでたため) 具体的には、Sheet1に参加日、参加時間、受付整理番号、氏名、フリガナ、そのほか住所などの申し込みデータがあります。 そこから、毎日、その日、その時間分の参加者データを綺麗なリストとして印刷したいため、1つの参加日・参加時間の氏名・フリガナだけを抽出した別シートSheet2で作成したいのです。 別シートに、A1に参加日、B1に参加時間を入力すると(実際は入力規制のリストから選ぶ)、 整理番号1番から縦に30番まであるセルC列の右D列に、氏名を表示させるようにしたいのです 以下、Sheet2の項目です A1    B1   C     D  F 参加日 参加時間 整理番号 氏名 フリガナ           1   数式 数式           2   数式 数式           3   数式 数式 A1でかつ、B2でかつ、C2に絞った結果をSheet1から抽出することは可能でしょうか

  • VBAにて、複数シートからデータを抽出

    エクセルVBAです。複数のシートからの集計、抽出の書き方について教えてください。 1つのファイルに50ほどのシートがあります。 各シートの列数やフォーマットは、同じですが行数は、異なります。 例 sheet1(シート名:集計):集計用   A    B    C       D     1 ※検索キーワードを入れるセルや 2   マクロを登録するボタン用として2行開けてある。 3 番号 氏名  郵便番号  住所  sheet2(シート名:STU)   A    B    C       D      1 番号 氏名  郵便番号  住所  2  1  AB   345    YZ 3  1  CD   678    QS sheet3(シート名:XYZ)   A    B    C       D      1 番号 氏名  郵便番号  住所  2  2  AB   345    YZ 3  2  CD   678    QS 4  3  CD   678    QZ 抽出前は、上記の様なファイルとなっております。 上記では、4列としてますが実際は、23列あります。 また、sheet3までですが、実際は、40~100シート位あります。 sheet1(シート名:集計):集計用   A    B    C       D     1     ※検索キーワード:氏名_CD としマクロを実行する  2       (↑例として氏名でフィルタリングしてますが他の指定項目でも実行したい、複数条件は、無)   3 番号 氏名  郵便番号  住所 4  1  CD   678    QS    (←sheet2(シート名:STU)の3列目) 5  2  CD   678    QS  (←sheet3(シート名:XYZ)の3列目) 6  3  CD   678    QZ  (←sheet3(シート名:XYZ)の4列目) ・  ・  CD    ・      ・ (←sheet4(シート名:・・・)の・列目) ・  ・  CD    ・      ・ (←sheet10(シート名:・・・)の・列目) ・ ・  CD    ・      ・ (←sheet27(シート名:・・・)の・列目) ・  ・  CD    ・      ・ (←sheet27(シート名:・・・)の・列目) ・ ・  CD    ・      ・ (←sheet30(シート名:・・・)の・列目) 上記の様にすべてのシートから氏名:CDでフィルタリングし集計シートに抽出したい。 よろしくお願いいたします。

  • エクセルの複数ワークシートの列を縦に並べる方法

    エクセルの1ファイル中にある複数のワークシートの列(項目は同じ)を 新しいワークシート列に統合する機能はありますか? ワークシート(1) 列A-1 列B-1 列C-1 ワークシート(2) 列A-2 列B-2 列C-2 ワークシート(3) 列A-3 列B-2 列C-3 新ワークシート 列A-1 列B-1 列C-1           列A-2 列B-2 列C-2           列A-3 列B-3 列C-3 と、いう具合です。コピーすればいいのですが、 一括でできる方法があれば、教えてください。 よろしくお願いいたします。                    

  • 条件1つで複数の値を抽出することはできませんか。

    エクセルのことなのですが、条件1つで複数の値を抽出してきたいと思っています。 しかし、様々な本やインターネットのサイトを参照したのですがうまくできません。 内容なのですが、「シート1」というシートがありこのシートを「シート2」のように番号で分けて、横に並べるようなシートを作りたいと思っています。 シート1 番号 品目 100 A 100 B 101 C 101 D 101 E 101 F 101 G 101 H 101 I 102 J 103 K 103 L シート2 番号 品目 100 A B 101 C D E F G H I 102 J 103 K L すみませんが教えていただけないでしょうか。 よろしくお願いします。

  • エクセルシートのデータの並び順を変えたい

    sheet1の内容 A列       B列      電話 名前1     メルアド1  電話1 名前2     メルアド2  電話2 名前3     メルアド3  電話3 これを sheet2の内容 A列 名前1 メルアド1 電話1 名前2 メルアド2 電話2 名前3 メルアド3 電話3 ・・・というように  sheet1のメールアドレスリストを sheet2のA列に 名前 メルアド 電話 の 順で縦に並べたいのですが 関数だとどうなりますか? メールアドレスリストは 200件以上あります。 =Sheet1!A1 =Sheet1!B1 =Sheet1!C1 を200個以上も手打ちでしょうか。

  • 複数のシートから抽出

    検索値シート1【B】111で行い、検索範囲をシート2~4の【B】列全てを検索して一個だけ検索できたら【A】列AAAをシート1の【C】に検索結果を表示させます。シート2~4全て内容は違います。 シート1【B】列500以上全て検索値とします。関数でやり方を探しております。お分かりの方がいらっしゃれば教えてください。 シート2~4 【A】  【B】  AAA ・ 111 BBB ・ 222 CCC ・ 333 DDD ・ 444 EEE ・ 555 シート1 【A】 【B】 【C】      111        222      333

  • 複数のワークシートのデータを使って、1つのグラフを作る方法

    いくつかのワークシートのデータを使って、1つのグラフ(積み上げ縦棒グラフ)を作るいちばん効率的な手順を教えてください。 (Sheet1にはA=1,B=2,Sheet2にはC=3,D=4というようにデータが入っていて、グラフは系列1はAとCの値、系列2はBとDの値…としたいのですが、普通にデータ範囲を指定しようとするとエラーになってしまいます。) 必要なデータを一度1つのシート上に複写する…という方法はできれば避けたいのですが、他に方法がないのであれば、関数やマクロ、ピボットテーブルetcを使って作業を効率化する方法がもしあれば教えていただければうれしいです。

専門家に質問してみよう