• ベストアンサー

【Excel】 名簿から抽出したい。

こんにちは sheet1に住所録があります。 sheet1 名前    住所 アイウエオ 東京都... カキクケコ 大阪府... サシスセソ 愛知県... ・ ・ ・ ・ ・ ・ ・ ・ sheet2に名前と日付のリストがあります。 sheet2 名前    日付 アイウエオ 10/2 サシスセソ 10/3 マミムメモ 10/4 カキクケコ 10/2 ラリルレロ 10/1 ・ ・ ・ ・ sheet3にはsheet2の日付が今日の人のみの住所録を 表示したいのですが、sheet3の式はどのようになるでしょうか。 sheet3 名前    住所 アイウエオ 東京都... カキクケコ 大阪府... 宜しくお願いいたします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。KenKen_SP です。 計算式では無理では、、、 ゴリゴリロジックで VBA コードを書いてみました。Sheet3 をアクティブ にすると自動でデータの抽出を行います。念のため「更新許可」を尋ねる 仕組みにしておきました。 ただ、小規模データの場合は問題ないと思いますが、大規模になると処理 スピードは遅いですね。サンプルデータ1万件で動作確認を行いましたが、 転記処理よりも今日の日付と該当するデータを探す処理(Findメソッド) でえらく時間がかかります。 注意事項として、Sheet3 の名前は変更しても差し支えありませんが、 Sheet1 および Sheet2 の名前を変更した場合、コードの修正が必要です。 【手順】 1. シート選択タブ上でSheet3 を選択し、右クリック[コードの表示] 2. Visual Basic Editor(以下VBE)が起動 3. VBE 上に以下のコードをコピー&ペースト 4. VBE 閉じる 5. 一度他のシートをアクティブにし、再度 Sheet3 をアクティブにして   コードが実行されることを確認 '以下終わりまでコード Option Explicit Private Sub Worksheet_Activate()      Const cstBufSize As Long = 500      Dim SH   As Worksheet   Dim rngDat As Range   Dim rngCel As Range   Dim rngFnd As Range   Dim Buf() As String   Dim i   As Long   Dim j   As Long   Dim lngR  As Long   If MsgBox(Format$(Date, "yyyy/mm/dd") & " のデータで更新しますか?", _     vbOKCancel Or vbDefaultButton2 Or vbInformation) = vbCancel Then     Exit Sub   End If   '初期化   Application.ScreenUpdating = False   Me.Cells.Clear   lngR = 2   ReDim Buf(cstBufSize)      On Error GoTo Terminate      'Sheet2 から今日の日付データをもつ行の名前を抽出   Set SH = ThisWorkbook.Sheets("Sheet2")   Set rngDat = Intersect(SH.UsedRange, SH.Columns(2))   For Each rngCel In rngDat     With rngCel       If Not IsEmpty(.Value) Or _         Not IsDate(.Value) Then         If .Value = Date Then           Buf(i) = .Offset(0, -1).Value           i = i + 1: j = j + 1           If j = cstBufSize Then             ReDim Preserve Buf(i + cstBufSize)             j = 0           End If         End If       End If     End With   Next rngCel   ReDim Preserve Buf(i - 1)      'Sheet1 から抽出した氏名の行を Sheet3 へコピー   Set SH = ThisWorkbook.Sheets("Sheet1")   Set rngDat = Intersect(SH.UsedRange, SH.Columns(1))   SH.Rows(1).Copy Destination:=Me.Rows(1) '見出しコピー   For i = 0 To UBound(Buf)     If Buf(i) <> "" Then       Set rngFnd = rngDat.Find( _         What:=Buf(i), _         LookIn:=xlValues, _         LookAt:=xlWhole)       If Not rngFnd Is Nothing Then         rngFnd.EntireRow.Copy Destination:=Me.Rows(lngR)       Else         Me.Cells(lngR, 1).Value = Buf(i)         Me.Cells(lngR, 2).Value = "No Data"       End If       lngR = lngR + 1       Set rngFnd = Nothing     End If   Next i   Erase Buf    Terminate:   Application.ScreenUpdating = True   If lngR = 2 Then     MsgBox "該当データはありません", vbInformation   End If   Set rngDat = Nothing   Set rngCel = Nothing   Dim SH = Nothing End Sub

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • goowon
  • ベストアンサー率39% (131/328)
回答No.4

Vlookup関数を使います。 sheet1 行番号   A列     B列 1     名前    住所 2     アイウエオ 東京都... 3     カキクケコ 大阪府... 4     ・      ・ 5     ・      ・ ・     ・      ・ sheet2 行番号  A列     B列 1     日付    名前  2     10/2   アイウエオ   3     10/3   サシスセソ   4     ・      ・ 5     ・      ・ ・     ・      ・ 日付を名前の前列に配置します。 以上改訂して sheet3 行番号 A列       B列 1   10/2←求める日付入力  2    名前      住所 3   アイウエオ   東京都... 4     ・      ・ 5     ・      ・ 6     ・      ・ A1に10/2を入力すると名前住所が出力されます。 A3の式 =VLOOKUP($A$1,Sheet2!$A$2:$C$100,2,) B3の式 =VLOOKUP(A3,Sheet1!$A$2:$C$100,2,) $C$100・・・検索範囲の行数です。 $・・・コピーするときに検索範囲が変わらないためです。 シート枚数はできるだけ少なくした方がいいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

下記でどうですか(imogasi方式) 氏名は同姓同名があれば山田太郎2のように区別してください。 例データ Sheet1のA1:B10 氏名 住所 山田 江東区 小島 佐倉市 大田 川口市 大島 杉並区 大山 船橋市 小山 千葉市 大川 八王子市 小川 三鷹市 木村 文京区 Sheet2のA1:B10 A列   B列        D列 10月1日 山田 10月1日 1 小島 10月2日 1 大田 10月1日 2 大島 10月4日 2 大山 10月5日 2 小山 10月1日 3 大川 10月2日 3 小川 10月1日 4 木村 10月9日 4 A1は抜き出す日を入力します。=TODAY()でも可。 D2に =COUNTIF($B$2:B2,$B$1) と入れて、D10まで式を複写する。 結果は上記D列の通り。 Sheet3に行き A1に =INDEX(Sheet2!$A$2:$B$10,MATCH(ROW(),Sheet2!$D$1:$D$10,0)-1,1) と入れて、A4まで式を複写。 B1に =VLOOKUP(A1,Sheet1!$A$2:$B$10,2,FALSE) と入れて、B4まで式を複写。 丁寧にすればA1は =IF(ROW()>MAX(Sheet2!$D$1:$D$10),"",INDEX(Sheet2!$A$2:$B$10,MATCH(ROW(),Sheet2!$D$1:$D$10,0)-1,1)) と入れて、適当行まで式を複写 B1は =IF(A1="","",VLOOKUP(A1,Sheet1!$A$2:$B$10,2,FALSE)) と入れて、適当行まで式を複写。 結果 山田 江東区 大田 川口市 小山 千葉市 小川 三鷹市

全文を見る
すると、全ての回答が全文表示されます。
  • kitoomo
  • ベストアンサー率50% (2/4)
回答No.2

Sheet1のA列に名前、B列に住所、 Sheet2のA列に名前、B列に日付があるものとします。 ふくざつになるのでSheet2のC,D,E列に以下のように式を分けます。 C列2行目以降に =IF(B2=TODAY(),A2,"") として今日の日付に該当する名前を抽出します。 D列2行目以降に(99はリストの行数より大きな数とします) =IF(C2=A2,MATCH(C2,A$2:A$10,0),99) として抽出した名前が何番目かを表します。 E列2行目以降に =SMALL(D$2:D$10,ROWS(D$2:D2)) として行の若い順に並べ替えます。 Sheet3のA列には =IF(Sheet2!E2<99,OFFSET(Sheet2!A$1,Sheet2!E2,0),"") としてSheet2で抽出した名前が Sheet3のB列には =IF(A2="","",OFFSET(Sheet1!B$1,MATCH(A2,Sheet1!A$2:Sheet1!A$10,0),0)) としてA列の名前に対応したSheet1の住所が表示できます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【Excel】 印をした行の内容を別のシートに表示します。

    こんにちは ─────────────────── sheet1  A  B       C     D 1   あいうえお  東京都  1000 2   かきくけこ  大阪府  2000 3 ●  さしすせそ  愛知県  2500 4   たちつてと  福岡県  1800 5   ・      ・    ・  6   ・      ・    ・  7   ・      ・    ・  8   ・      ・    ・  ─────────────────── sheet2  A      B     C 1 さしすせそ  愛知県  2500 ─────────────────── 上記のようにsheet1にリストがあり、そのA列の中に●で印をすると sheet2にその●をした行の内容が表示されるようにしたいのですが、 sheet2 A1 B1 C1 の式を教えてください。 A列の●は一箇所です。

  • Excelで特定の行だけ別シートに抽出する方法

    sheet1に下記のリストを作ります。 番号  名前    郵便番号     住所    電話番号     会社名  部署 1    高橋    〒111-1111   東京都   00-0000-0000  ○×    人事 2    田中    〒222-2222   神奈川県  111-11-1111   △□   営業 3    佐藤    〒333-3333   埼玉県    22-2222-2222  ・・・・   ・・・・ sheet2のA1に番号を入力すると「1」とした場合   名前    郵便番号    住所     部署   高橋    〒111-11111  東京都   人事 というように該当の列の特定の列だけを表示させる方法はありますでしょうか? 自動で抽出したいのですが、なにとぞよろしくおねい致します。

  • EXCEL2003で抽出?教えてください。

    シート1で入力されている住所、氏名、電話番号を、シート2の1セルに1文字づつ抽出して張り付ける方法をご存知の方お教えいただけませんか?お願いします。 (例) シート1のA1セルに 愛知県碧南市○○町○丁目○番地 と入力されている住所を シート2のA1.B1.C1・・・と1文字づつ表示させる方法です。 □□□□□□□□□□□□□□□ 各セルに1文字づつ振り分けて表示する方法なんですが・・・

  • 特定の文字を別シートに抽出する方法(Excel)

    sheet1に一覧表を作って特定の文字(数字)だけsheet2(送付状も兼ねている文書)の特定の場所に抽出したいのですができるような関数なのどありますでしょうか? sheet1↓ 番号  名前       郵便番号   住所 1    あべ なつみ 〒000-0000   東京都○○区 2    なかざわ ゆうこ  〒000-0000  山梨県○○市   3 sheet2↓ またsheet2のA1に番号を入れるとその3つ(A3に郵便番号 B5に住所 C6に名前)といった感じに反映するようにしたいんですができますでしょうか?1つ1つ関数で設定する方法もわかれば教えていただきたく思います。 ご回答いただけましたらと思います。初心者なものですがよろしくお願い致します。

  • エクセルでの関数について

    初めて質問します。解る方がいたら教えていただきたく書き込みします。エクセルで台帳を作成するため、sheet1に次の通り情報を入力しました。    A  B    C     D 1 日付 名前  住所   申請事由   2 1/1 甲川  東京都    1 3 1/2 乙本  大阪府     1 4 1/2 丙藤  北海道    2 5 2/1 甲山  京都府     3 ・ ・  ・  ・        ・ そして、sheet2に申請事項1の人の情報を、sheet3に申請事項2の人の情報を、sheet4に申請事項3の人の情報を空白を開けずに次の通り詰めて入力したいのです。 sheet2(申請事由1の人)     A      B      C 1  日付  名前   住所 2  1/1 甲川  東京都 3   1/2 乙本  大阪府 4 ・   ・    ・ sheet3(申請事由2の人)     A      B      C 1  日付  名前   住所 2  1/2   丙藤  北海道 3 ・   ・    ・ 4 ・   ・    ・ sheet1に日付、名前等を入力しただけで、各事由事に他のsheetに詰めて入力されるよう関数式で入力することは可能かどうか教えてください。よろしくお願いします。

  • ホッカイ、ほっかい、北海 ってどう?

    <都道府県> 東京都=東京・都 「東京都の***」、「東京の***」 両方言いますし。通じます 大阪府=大阪・府 「大阪府の***」、「大阪の***」 同上 愛知県=愛知・県 「愛知県の***」、「愛知の***」 同上 ということは・・ 北海道=北海・道 「北海道の***」は言いますが 「北海の***」とは言わないし聞かない。 どうしてでしょ? 言いにくいから?う~ん・・ (“どう”でもいいような質問で恐縮ですが)

  • EXCEL2010で並べ替えの方法

    excel2010で住所録を作っています。 氏名   〒        住所          所属事務所  A   000-1234   東京都江東区○○   A事務所  B   123-1111   大阪府大阪市○○   B事務所  C   234-5454   広島県広島市○○   C事務所 上記のようにランダムに並んだ住所リストを同一の郵便番号か○○部分までの同一住所ごとに 並べか経たいのですが可能でしょうか? 初心者なので説明が足りない部分があるかと思いますが、宜しくお願いいたします。

  • エクセルで別シートに条件の合う全てのデータ抽出

    初めまして。 いろいろ見てみたのですが解決しなかったので教えて下さい。 Sheet1には     受付日  氏名  生年月日  住所      A    B    C    D  1 2007/10/1 左藤  S50.10.10  大阪府 2 2007/10/1 鈴木  S57.04.25  奈良県 3 2007/10/2 吉村  S49.09.17  鳥取県 4 2007/10/8 山田  S49.09.09  東京都 5 2007/10/9 伊藤  S50.10.13  愛知県 6 2007/10/9 上田  S57.04.19  福岡県 上記のようなデータを下記のようにSheet2に生年月日でデータを抽出したいのですが抽出したい年月をA1に入れたらデータがとんでくるようにするにはどうすれば良いでしょうか?教えて下さい。      A    B    C    D  1  S50.10 2 2007/10/1 左藤  S50.10.10  大阪府 3 2007/10/9 伊藤  S50.10.13  愛知県 VLOOKUPで作ってみたのですが一つしかとんでこなくて下記のように全て表示でません。      A    B    C    D  1  S50.10 2 2007/10/1 左藤  S50.10.10  大阪府 3 2007/10/1 左藤  S50.10.10  大阪府 どうかよろしくお願いします。

  • EXCELの抽出・並び替え

    <SHEET 1>    A  B C D 1 会社 ABC 住所  東京都   2 電話  03- 売上  6200 3 設立 7704  従業員 2000     A  B C D 1 会社 DEF 住所  大阪府   2 電話  06- 売上  200 3 設立 9905  従業員 520         シート1に「会社名のあいうえお」順に上記のような表がたくさんあるとします。 <SHEET 2> A B C 会社   売上   住所  ABC  6200 東京都  DEF  200 大阪府 シート2には、シート1の表の項目「会社」「売上」「住所」だけをピックアップし、「売上順」に上記のような 表を作成したいのですが、どうすればいいでしょうか? あまり難しい関数はわかりません。    

  • エクセルの重複データ抽出、削除についての質問です。

    会社で事務をしている者です。2つの顧客リストから重複データを抽出し、それから重複データを削除しなくてはならなくなりました。具体的には以下の順序で行いたいのですが、素人なので方法がわかりません。皆様のお知恵をいただきたいとおもいます。よろしくお願いします。 顧客リストA 顧客番号 氏名 住所 金額A 1 聖徳太子 奈良県奈良市 480 2 坂本竜馬 高知県高知市 150 3 織田信長 岐阜県岐阜市 300 4 徳川家康 愛知県名古屋市 320 5 豊臣秀吉 愛知県名古屋市 180 6 紫式部 京都府京都市 230 7 真田幸村 長野県上田市 140 8 土方歳三 東京都日野市 200 9 宮本武蔵 熊本県熊本市 350 10 福沢諭吉 大阪府大阪市 130 11 上杉謙信 新潟県上越市 540 2、顧客リストB 氏名 住所 金額B 土方歳三 東京都日野市 250 千利休 大阪府堺市 280 織田信長 岐阜県岐阜市 300 武田信玄 山梨県甲府市 220 伊達政宗 宮城県仙台市 140 坂本竜馬 高知県高知市 200 聖徳太子 奈良県明日香村 380 福沢諭吉 大阪府大阪市 130 上杉謙信 新潟県上越市 500 西郷隆盛 鹿児島県鹿児島市 660 3、顧客リストA・Bより氏名、住所の一致した先を検索し、金額AおよびBとともに別シートに抽出。 顧客番号 氏名 住所 金額A 金額B 2 坂本竜馬 高知県高知市 150 200 3 織田信長 岐阜県岐阜市 300 300 8 土方歳三 東京都日野市 200 250 10 福沢諭吉 大阪府大阪市 130 130 11 上杉謙信 新潟県上越市 540 500 4、抽出した顧客リストのうち金額A・Bが同額である先を削除。 顧客番号 氏名 住所 金額A 金額B 2 坂本竜馬 高知県高知市 150 200 8 土方歳三 東京都日野市 200 250 11 上杉謙信 新潟県上越市 540 500 以上です。使用ソフトはエクセル2003です。 多少手間はかかってもわかりやすい方法でお願いします。

専門家に質問してみよう