時間が一致するデータの抽出方法とは?

このQ&Aのポイント
  • Excel2010を使用して時間が一致するデータを抽出する方法を教えてください。大量のデータがあり、困っています。
  • Sheet2の特定の時間範囲にSheet1の特定の時間が含まれる場合、該当する会員をSheet2の特定の列にカンマ区切りで入力したいです。
  • VBAや関数の知識が浅いため、自分では解決できません。お力をお貸しいただけると助かります。
回答を見る
  • ベストアンサー

時間が一致するデータの抽出

Excel2010を使用しています。 大量のデータがあり、困っています。 添付画像の赤字部分を作りたいのですが、どなたかお力をお貸しいただけないでしょうか。 Sheet2_B列(開始時間)~C列(終了時間)間に、Sheet1_B列(入時間)が含まれるデータのA列(会員)を、Sheet2_D列(入場者)にカンマ区切りで入れたい(赤字部分)のですが、関数及びVBAの知識が浅いため、自分で思うように作れません。 時間はすべて数値で入っています。 Sheet1の会員の入時間は、Sheet1内でかぶることはありません。 Sheet2の開始時間、終了時間はSheet2内でかぶることがあります。 どうかよろしくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! Sheet1・Sheet2とも日付(時刻)セルはシリアル値だとします。 VBAでの一例です。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() 'この行から Dim i As Long, k As Long, endRow As Long, str As String, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") endRow = wS2.Cells(Rows.Count, "B").End(xlUp).Row If endRow > 1 Then Range(wS2.Cells(2, "D"), wS2.Cells(endRow, "D")).ClearContents End If For k = 2 To wS2.Cells(Rows.Count, "B").End(xlUp).Row For i = 2 To wS1.Cells(Rows.Count, "B").End(xlUp).Row If wS1.Cells(i, "B") >= wS2.Cells(k, "B") And wS1.Cells(i, "B") <= wS2.Cells(k, "C") Then str = str & wS1.Cells(i, "A") & "," End If Next i If Len(str) > 1 Then wS2.Cells(k, "D") = Left(str, Len(str) - 1) End If str = "" Next k End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

Penny0520
質問者

お礼

お教えいただき、ありがとうございます。 データ数を増やして試しましたところ、全部の会員名が入場者列に入りました。 本当に助かります。ありがとうございましたm(_ _)m。

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 関数を使った方法です。  こちらは、カンマ区切りになってはいないという点では回答No.3様の方法と同様ですが、配列式ではなく、通常の関数ですので、元データの値を入力するだけで結果が表示されます。  まず、Sheet2のD2セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/DAY($B2)/DAY($C2)),IF(COLUMNS($D:D)>COUNTIFS(Sheet1!$B:$B,">="&$B2,Sheet1!$B:$B,"<="&$C2),"",INDEX(Sheet1!$A:$A,MATCH(SMALL(Sheet1!$B:$B,COUNTIF(Sheet1!$B:$B,"<"&$B2)+COLUMNS($D:D)),Sheet1!$B:$B,0))),"")  次に、Sheet2のD2セルをコピーして、Sheet2のD3以下に貼り付けて下さい。  次に、Sheet2のD列全体をコピーして、Sheet2のE列以降の列に貼り付けて下さい。  尚、この方法は、あくまで >Sheet1の会員の入時間は、Sheet1内でかぶることはありません。 という条件が守られている場合にのみ有効な方法で、もしも、入り時間がかぶっている様な事がある場合には、正しい結果を得られなくなりますので注意して下さい。

Penny0520
質問者

お礼

お礼が遅くなりまして申し訳ありません。 教えていただきました式をSheet2のD2セルに入力したのですが、#Name?エラーが出てしまいました。 勉強不足のため自分で直せなくて、申し訳ありません。 たくさんの方に教えていただき、なんとか作業を進められそうです。この場をお借りして、回答者の皆様にお礼を申し上げます。 今回は、同一セル内に入場者名を…というリクエストに応えてくださったtom04さんをベストアンサーとさせていただきます。 今後ともよろしくお願い致します。 ありがとうございましたm(_ _ )m。

noname#204879
noname#204879
回答No.3

D列以右の複数列に入場者名(赤字部分)を入れたので、別解です。 Sheet2!D2: {=INDEX(Sheet1!$A$1:$A$10,SMALL(IF((Sheet1!$B$1:$B$10>=$B2)*(Sheet1!$B$1:$B$10<=$C2),ROW(A$1:A$10),""),COLUMN(A1)))} (配列数式) ただし、セル D2 に次の[条件付き書式]を施しています。 数式が   =ISERROR(D2) フォント色 白

Penny0520
質問者

お礼

お教えいただき、ありがとうございます。 データ数を増やして試しましたところ、複数列ではありますが、全部の会員名が入りました。 今回は一つのセルにまとめて入れるという作業なのですが、今後方針が変わってセルを分ける作業になるかもしれませんので、その際に使わせていただきます。 ありがとうございましたm(_ _)m。

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

あんまり効率的じゃありませんが、手抜きせず丁寧に逐一見てった方が判りやすいと思います。 sub macro1()  dim w1 as worksheet, w2 as worksheet  dim r1 as long, r2 as long  dim LastRow1 as long, LastRow2 as long  set w1 = worksheets("Sheet1")  set w2 = worksheets("Sheet2")  lastrow1 = w1.range("A65536").end(xlup).row  lastrow2 = w2.range("A65536").end(xlup).row  for r2 = 2 to lastrow2   for r1 = 2 to lastrow1    if w2.cells(r2, "B") <= w1.cells(r1, "B") and w1.cells(r1, "B") <= w2.cells(r2, "C") then     w2.cells(r2, "D") = w2.cells(r2, "D") & "," & w1.cells(r1, "A")    end if   next r1   w2.cells(r2, "D") = mid(w2.cells(r2, "D"), 2)  next r2 end sub

Penny0520
質問者

お礼

お教えいただき、ありがとうございます。 データを増やして試しましたところ、5行目まではうまく行きましたが、6行め以降は結果が表示されませんでした。 自分で直せれば…と思い"A65536"を"A105536"に変えて実行してみましたが、エラーになってしまいました。 お時間がありましたら、もう少し教えていただけると助かります。 どうぞよろしくお願い致します。

関連するQ&A

  • Excelでデータを抽出したい

    エクセルに詳しくないので、教えてください。 Sheet1のA列とB列に文章データがあります。このデータは2つで1セットになっています。 Sheet2には、D列部分にA列のデータが順不同であります。 このA列とD列にあるデータ同士の文章は同一のものですが、 Sheet1にあるB列のデータがSheet2にはないので、 同じB列のデータをD列の隣のE列に表示させ、 同じようにまた2つで1セットにしたいと思っていますが、方法がわかりません。 わかりにくい表現で申し訳ないのですが 教えていただけると助かります。 よろしくお願いします。

  • エクセル:データ一致したとき1を足す

    教えて下さい。 シート(1)A列とB列に Aさん 2 Bさん 1 Cさん 3 Dさん 5  と1000行くらいあります。 シート(2)A列に Aさん Dさん Eさん   とあります。 シート(2)にある人のみシート(1)のB列の数字に1足したいのですが何か方法はありますか? 自慢じゃないけどVBAは分かりません。 どうぞよろしくm(__)m

  • 【エクセル】マスターから条件一致の全データ抽出

    質問させていただきます。 バージョンは2003です。 一つのBOOK内に、マスターデータsheet(以下、マスター)が一つあります。2sheet目以降は同じフォーマットで個人毎の区分でsheet分け(以下、個人シート)しており、マスターから個人名にてデータを抽出し、個人シートに一覧表を作成したいと考えております。またレギュレーションとしては、BOOKを開いた時には自動で計算されていることです。 いろいろな関数で試しても構築できずに困っております。 またVBAについては完全に素人ですが、領域的にはVBAであろうと覚悟はしております。 関数でもVBAでも構いません。何卒ご教授くださいませ。 よろしくお願いいたします。 ■マスターデータ  A   B   C    1鈴木 商品1 外注1 2山田 商品2 外注2 3田中 商品3 外注3 4鈴木 商品4 外注1 5鈴木 商品5 外注3 例えば“鈴木用”個人シートであれば、1,4,5行にある3データを個人シート上に一覧表として表示させたいです。 参考までに情報量としては、マスターデータでは29列×3000行。個人シートは100シート程度あります。 よろしくお願いいたします。

  • データ抽出に時間がかかり困っています

    皆様大変お世話になっております。ところで、データ抽出の件で大変困っておりまして、ご教授いただきたくご連絡差し上げました(使用OSはXP、エクセルは2007です。)。企業の決算期データを抽出したいのですが、毎年度決算月のみのデータを月次データからどのようにすれば速く抽出できるかで悩んでおります。データの構成は:A列に年度・決算月(例えば、1978/03)、B列に企業コード、C列に年度・月(例えば、1984/01)、D列に企業コード、E列にはC・D列に対応した月次データが入力されております。A・B列は(各企業の年毎の決算月)各70698行、C・D・E列は(各企業の月次毎データ)各248964行となっております。ここで、A・B列に等しいC・D列のセルをみつけ、その横のE列の値を当該A・B列に対応した行のF列に書き出させたいのです(回りくどい説明で申し訳ありません。)。初心者ながら、いろいろなVBA説明ページを参照しつつ、以下のコードを作成しました: Sub Sorting01() Dim ra As Long, rc As Long Application.ScreenUpdating = False For ra = 3 To Range(A70698).End(xlUp).Row If Cells(ra, 1) <>"" Then For rc = 3 To Range(C248964).End(xlUp).Row If Cells(rc, 3) <>"" And Cells(ra, 1).Value = Cells(rc, 3).Value And Cells(ra, 2) = Cells(rc, 4) Then Cells(ra, 7).Value = Cells(rc, 5).Value Exit For End If Next rc End If Next ra MsgBox Done End Sub データの一部(100行分)を別のシートに貼り付けて動くかどうか試したところ、問題ありませんでしたが、元のデータに適用したところ、とてつもなく時間がかかっております。上述のコードが非常に非効率的なものではないかと考えております。初心者で誠に恥ずかしい限りですが、きわめて急いでいることもありご連絡差し上げました。時間短縮のため、効率的なコード、または他の方法(関数)がありましたら、教え願いたく存じます。重ねながら、どうぞ宜しくお願いいたします。 追伸:A列・C列の/は取り除き数字の状態に変えてあります(例えば、1977/01 =>197701)。一点、申し上げておきたいことは、B列に出てくるコードがD列に必ずしもあるわけではありません。

  • Excel データを部分一致で抽出して表示したい (関数 または VBA)

    まずは下のサンプルデータを見ながら本文を読んでください。 Excelの関数(lookup か vlookup) か VBAを利用して、 Sheet2のセルA列にデータを自動的に表示したい と思っています。 Sheet2のセルA列に表示したいデータは、Sheet1のセルAの情報です。 例えば、Sheet2のセルB1が「静岡県」の場合は、「営業2部」という文字が Sheet2のセルA1に表示されるようにしたいと思っています。 つまり、Sheet1のセルB が Sheet2のセルB の内容と 部分一致した場合に、Sheet2のセルA列に 該当データ(Sheet1のセルA)を 抽出して表示するということをやりたいと考えています。 どうぞよろしくお願い致します。 サンプルデータ ◆Sheet1 参照元となる表 ___|___セルA___|________セルB ---------------------------- 1 | 営業1部 | 東京都千代田区 ---------------------------- 2 | 営業2部 | 静岡県 ---------------------------- 3 | 営業2部 | 山梨県 ---------------------------- 4 | 営業3部 | 東京都渋谷区 ---------------------------- 5 | 流通1部 | 神奈川県 ---------------------------- ◆Sheet2 データを埋めたい表 ___|____セルA_____|_______セルB ---------------------------- 1 |________________| 静岡県富士市大淵 24 ---------------------------- 2 |________________| 東京都千代田区丸の内1-8 ---------------------------- 3 |________________| 大阪府大阪市中央区南船場1―15 ---------------------------- 4 |________________| 神奈川県横浜市 ---------------------------- 5 |________________| ※以下 セルBには500件ほどの都道府県データあり。 6 7 ・ ・

  • EXCELで別シートから値の一致しないデータを抽出する方法

    Sheet1のA列に A1 123 A2 456 A3 789 のデータが入力されており、Sheet2のB列に B1 666 B2 123 B3 888 B4 999 B5 456 B6 888 のデータが入力されている場合に、 下の表のように、Sheet1のA4以降のセルにSheet2のB列から ・Sheet1のA1~A3に一致しないデータ ・Sheet2のB列で重複しないデータ ・降順 の3点の条件で抽出する方法を関数で教えてください。 よろしくお願いします。 Sheet1 A1 123 A2 456 A3 789 A4 999 <-ここからSheer2のデータでA1~A3以外の値でSheet2の重複をさけて降順で表示させたい A5 888 A6 666

  • 【エクセル】リストと一致するデータを抽出し、文字に色をつけることは可能でしょうか?

    エクセルで作成したファイルの【シート1:表】に様々なデータを打ち込んでおり、【シート2:リスト】にはリスト一覧を入れています。 シート1の表で、リストと該当する文字列だけに色をつけることは可能でしょうか。表はこのような感じです。 【表】   A列    B列 1 りんご   apple 2 りんごを食べる eat an apple 3 みかん     orange 4 みかんを買う  get an orange 【リスト】   A列       B列 1 りんご     apple 2 みかん     orange このような表なのですが、例えば、1行目、3行目はリストと同じなので赤い文字で表示し、A2のセルの「りんごを食べる」の「りんご」とB2セルの「eat an apple」の「apple」、またA4セルの「みかんを買う」の「みかん」と「get an orange」の「orange」の文字列だけを赤字にするようなことは可能でしょうか。 少量のデータなら手作業で変更できるのですが、データが大量にあるため手作業では追いつかず困っています。どなたかご存知の方がいらっしゃいましたら、よろしくお願いいたします。

  • データ抽出方法

    おはようございます。 sheet1 B列、C列に重複してるデータと、そうでないデータが混在して沢山あります。 sheet2 B列、C列に一点一様の型でデータを抽出したいご伝授下さい sheet1 B列、C列 A-1-1 A A-1-1 A B-2-1 D B-2-2 E C-2-1 B C-2-1 B C-2-3 C sheet2 B列、C列(抽出結果) A-1-1 A B-2-1 D B-2-2 E C-2-1 B C-2-3 C

  • シート1とシート2のデータ一致 抽出方法

    エクセルのデータ抽出でお知恵をお貸し下さい。 シート1 A列  B列     C列 品名  製品番号  数量 AA    1AAAA    200 BB    1BBBB    250 CC    1CCCC    300 シート2 A列   B列     C列 品名  製品番号   数量 AA    1AAAA   200 BB    1BBBB   250 AB    AAAA    500 CC    1CCCC   300 上記のようなシートがあります。 内容は同じなのですが、シート2にはシート1にはない品名、製品番号、数量が含まれます。 シート1の品名、製品番号、数量がすべて一致するものをシート3へ抽出し、 一致しなかったデータ(シート1にはなく、シート2にあるものを含め)をシート4へ抽出したいのですが 何か良い方法はないでしょうか??

  • Excelでのデータ抽出

    Excelで外部結合風のデータ抽出を教えてください。 シートAとシートBに表形式のデータがあり、 シートAのA列の値とシートBのA列の値が一致するシートBの 行を抽出するのが目的です。 具体的には次のような感じです。 シートA         シートB ----------------  ---------------- A列 | B列 | C列     A列 | B列 | C列 ----------------  ---------------- 2  | 2B  | 2C      1  | 1BB | 1CC ----------------  ---------------- 4  | 4B  | 4C      2  | 2BB | 2CC ----------------  ---------------- 6  | 6B  | 6C      3  | 3BB | 3CC ----------------  ---------------- ↓ シートB ---------------- A列 | B列 | C列 ---------------- 2  | 2BB | 2CC ---------------- 以下以外の方法がありましたら教えてください。 1)アクセスに両シートのデータを取り込み、2つのテーブルを外部結合で連結させる。 2)マクロで二重ループをつくり、A列が一致した行を取り出す。 よろしくお願いします。

専門家に質問してみよう