• ベストアンサー

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

KenKen_SPの回答

  • ベストアンサー
  • 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

関連する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です。 多少手間はかかってもわかりやすい方法でお願いします。