• 締切済み
  • 困ってます

VBAを使用したデータの抽出について

sheet1に下記のような(例)データベースがありA~N列までデータが入力されています。 A B  C  D  E   F  G  H I J  N 1 ○○様 ○○  2名  車   可 東京 *** *** *** 2015/7/1 2 ○○様 ××  3名  車  不可 埼玉 2015/8/1 3 ○○様 ×□  2名  電車 不可 愛知 2015/8/12 4 ○○様 □□  4名  バス  可  新潟 2015/7/13 5 ○○様 ○×  3名  バス  可  宮城 2015/6/1 6 ○○様 ○□  4名  車  不可 大阪 2015/8/21 7 ○○様 □○  2名  バス  可  山梨 2015/8/7 「sheet1」B列のデータを元にして、別シート(sheet2)のA2列に抽出したいもの(例:バス)を入力し、 フォームボタン(例:抽出)で検索し、抽出された結果のsheet1のA列~G列、N列のみ(H列~J列は不要)をSheet2のA11以下へ表示したいと考えています。 A  B  C  D  E   F  G   N 4 ○○様 □□  4名  バス  可  新潟 2015/7/13 5 ○○様 ○×  3名  バス  可  宮城 2015/6/1 7 ○○様 □○  2名  バス  可  山梨 2015/8/7 どのようなVBAのコードを使用すれば良いでしょうか。 宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数102
  • ありがとう数0

みんなの回答

  • 回答No.1

 御質問文の例では、Sheet1にはいきなり1行目からデータが入力されている様に書かれていますが、実際にはA列に1と入力されているセルはA1セルなどではなく、そのA列に1と入力されている行の上には何らかの項目名が入力されている行があるのではないでしょうか?  御質問の件の様なVBAのマクロを作るためには、何行目からデータが入力されているのかという事に関する情報も必要になる場合が多いので、実際のデータが何行目から入力されているのかという事も忘れずに説明しておく様にして下さい。  尚、いきなり1行目からデータが入力されている場合には処理が面倒になりますので、いきなり1行目からデータを入力する事はなるべく避けた方が宜しいかと思います。  それで、実際のデータが何行目から入力されているのかという事が不明なため、取り敢えず仮の話として、Sheet1において項目名が入力されている行は2行目であり、実際のデータは3行目以下に入力されているものとします。  その場合、色々なやり方がありますが、一例としてオートフィルターを利用した方法では次の様なVBAマクロとなります。 Sub QNo9008324_VBAを使用したデータの抽出について() Dim CopySheet As Worksheet, PasteSheet As Worksheet, _ ItemRow As Long, LastRow As Long, PasteCell As Range, _ CopyColumn As String, UnwantedColumn As String, _ ReferenceColumn As String, myCriteria As Variant, _ CriteriaCell As Range Set CopySheet = Sheets("Sheet1") '元データが入力されているシート Set PasteSheet = Sheets("Sheet2") '貼付け先のシート CopyColumn = "A:N" 'コピーする元データが入力されている列の範囲 UnwantedColumn = "H:J" 'コピーする必要のない列の範囲 ReferenceColumn = "E" '抽出したいものが入力されている列 ItemRow = 2 ' 元データの表の項目欄の行番号 Set PasteCell = PasteSheet.Range("A11") '貼付け先のセル範囲の中で最も左上にあるセル Set CriteriaCell = PasteSheet.Range("A2") '抽出したいものが入力されているセル myCriteria = CriteriaCell.Value If myCriteria = "" Then MsgBox "抽出すべき項目が指定されていないため処理を行う事が出来ません。" & _ "マクロを一旦、終了しますので、抽出すべき項目を" _ & PasteCell.Parent.Name & "!" & PasteCell.Address(False, False) & _ "セルに入力してから本マクロによる処理をやり直して下さい。", _ vbExclamation, "抽出項目未設定" Exit Sub End If LastRow = CopySheet.Range(ReferenceColumn & Rows.Count).End(xlUp).Row If LastRow <= ItemRow Or WorksheetFunction.CountIf(CopySheet. _ Range(ReferenceColumn & ItemRow & ":" & ReferenceColumn & LastRow), _ myCriteria) = 0 Then MsgBox "抽出すべきデータがありません。", vbInformation, "データ無し" Exit Sub End If Application.ScreenUpdating = False PasteCell.Resize(PasteSheet.Cells.SpecialCells(xlCellTypeLastCell).Row - PasteCell.Row + 1, _ Columns(CopyColumn).Columns.Count - Columns(UnwantedColumn).Columns.Count).ClearContents With CopySheet If .AutoFilterMode Then CopySheet.Cells.AutoFilter .Columns(UnwantedColumn).EntireColumn.Hidden = True .Range(ReferenceColumn & ItemRow & ":" & ReferenceColumn & LastRow). _ AutoFilter Field:=1, Criteria1:=myCriteria Intersect(.Columns(CopyColumn), .Rows(ItemRow & ":" & LastRow)).SpecialCells(xlCellTypeVisible).Copy PasteCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False .Cells.AutoFilter .Columns(UnwantedColumn).EntireColumn.Hidden = False End With Application.ScreenUpdating = True End Sub  尚、もしSheet1において項目名が入力されている行が2行目ではなかった場合には、上記のVBAの構文中の ItemRow = 2 という箇所の2という数値の部分を、実際の項目名が入力されている行の行番号に合わせて修正して下さい。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • VBA 複数条件でデータを抽出する場合

    sheet1に下記のような(例)データベースがありA&#65374;BS列までデータが入力されています。 A  B C  D  E   F  G  H I J  BS 1 ○○様 ○○  2名  車   可 埼玉 *** *** *** 2015/7/1 2 ○○様 ××  3名  車  不可 東京 2015/8/1 3 ○○様 ■■  2名  電車 不可 愛知 2015/8/12 4 ○○様 □□  4名  バス  可  新潟 2015/7/13 5 ○○様 ○×  3名  バス  可  宮城 2015/6/1 6 ○○様 ■□  4名  車  不可 東京 2015/8/21 7 ○○様 □○  2名  バス  可  山梨 2015/8/7 「sheet1」のデータでBS列の期間(YYYY/MM/DD&#65374;YYYY/MM/DD)とG列の地域名(例:東京)を抽出条件とし、 抽出された結果のsheet1のA列&#65374;G列、BS列のみ(H列&#65374;BT列は不要)をSheet2のA11以下へ表示するマクロを組みたいと考えています。 A  B  C  D  E   F  G   BS 2 ○○様 ××  3名  車  不可 東京 2015/8/1 6 ○○様 ■□  4名  車  不可 東京 2015/8/21 複数条件下の抽出の場合、どのようなVBAのコードを使用すれば良いでしょうか。 宜しくお願いします。

  • データ抽出法

    一度似たような質問をしましたが応用がきかないので、教えてください。 Sheet1A列に入力されたデータ群を含むデータを別sheetから抽出したいのですがやり方がわかりません。 要は、Sheet1A列に10000件のデータが入力されているのですが、それらを含むデータを別シートから検索したいのです。(別シートで10000回検索しない方法が知りたいです。) よろしくお願いします。

  • 【Excel VBA】条件を満たすデータを順に抽出

    Excel2003を使用しています。 CSVでExcelに取り込んだデータの中から、条件を満たすものを順に抽出して一覧表を作成するマクロを作りたいのですが。。。 ・Sheet2のB列に“コード”と入力されている行のC列のデータ → Sheet1のC列2行目以下 ・Sheet2のC列に“合計”と入力されている行のD列のデータ → Sheet1のD列2行目以下 に順に表示させたいのですが、うまくいきません。 以前、いただいた回答で参考になりそうなものを見てみたのですが、手順というか何かヒントのようなものをいただけたら、自分でどうにかできそうなので、質問させていただきました。 よろしくお願いします。

  • 重複するデータの抽出

    どなたか教えてください。 Sheet1A列に入力されたデータ群と重複するデータを 別sheetから抽出したいのですがやり方がわかりません。 要は、Sheet1A列に10000件のデータが入力されているのですが、それらと重複するデータを別シートから検索したいです。(別シートで10000回検索しない方法が知りたいです。) よろしくお願いします。

  • Excelをデータベースのように使用した場合 データの抽出

    Excelをデータベースのようにして使用している場合について教えて欲しいことがあります。  ・Sheetを2つ作成したとします。  ・Sheet1はたくさんのデータが入っているシートです。  ・Sheet1の名前を仮に『Data』とします。  ・Sheet2はSheet1から必要なデータを抽出してきて並べるシートです。  ・Sheet2の名前を仮に『Report』とします。  ・『Data』のA列には1~200までの数字が入力されています。  ・その数字は ランダムである上に 重複していることもあります。  ・例えばA1には「1」が入力されていて A2には「2」が入力されています。  ・しかし その後A3にもA4にもA5にも「2」が入力されています。  ・同様にA6~A15までは「3」が入力されているのです。  ・このようにA列の数字は 同じ数字が何度も重複しており その重複には規則性はありません。  ・『Report』シート上で『Data』シートからデータを抽出したいのですが A列に「1」と入力されているデータだけを取り出すのなら「VLOOKUP」でもできますよね・・・・  ・しかし A列に「2」と入力されているデータを「VLOOKUP」関数で選んでも その先頭行のデータしか読み込んできません。  ・『Data』シートのA列に入力している数字から 必要な数字が入力されている行のデータだけを 全て『Report』シートに並べようとした場合 手作業で行うとすると・・・ 『Data』でA列が「1」のデータだけを選び,それを『Report』シートに貼り付ける。次は「2」で実行する。・・・・・という作業を200回繰り返すことになりますが 簡単に行うにはどのようにすればいいのでしょうか? マクロについては あまり詳しくないので できれば関数を使いたいのですが 無理でしょうか? マクロを使うのであれば 分かりやすく教えていただきたいのですが・・・ 勝手なお願いで申し訳ありませんが よろしくお願いします。

  • VBAのデータ抽出について

     列  A   B   C 行1 番号  色   形  2  1   白   丸  3  2   赤   三角  4  1   赤   丸  5  3   黄   四角 (1)Excel Sheet1にコマンドボタン1があり、それをクリックするとUserForm1が表示されます。 (2)UserForm1には「番号」「色」「形」の各コンボボックス1,2,3が配置されています。 (3)各コンボボックス1,2,3に表示されるのは、Sheet1の各列のデータです。 (4)コンボボックス1,2,3のうち1つ選択→その条件に合うデータを抽出。  コンボボックス1,2,3のうち2つ選択→その2つの条件に合うデータを抽出。  コンボボックス1,2,3のうち3つ選択→その3つの条件にあるデータを抽出。 (5)Sheet1のコマンドボタン2をクリックすると、Sheet1は元のデータ一覧に戻る。 というようなプログラムを組みたいと思っています。 (4)のデータ抽出、(5)の戻し方がよくわかりません。 どなたかご教授下さい。

  • VBA 期間を指定してデータを別シートに抽出

    sheet1に下記のような(例)データベースがありA&#65374;N列までデータが入力されています。 A  B  C  D  E  F  G  H I J K L M  N 1 りんご ○○ BA 2526  ○  あお *** *** *** *** *** *** 2015/7/1 2 みかん ××  BC  2526 ○  あお 2015/8/1 3 すいか ●●  BB  2429  ●  あか 2015/8/12 4 メロン □□  DC  2355 □  あか 2015/7/13 5 バナナ ○×  FE  2526  ○  あお 2015/6/1 6 いちご ●□  LA  2429  ●  あお 2015/8/21 7 ぶどう □○  HK  2526  □  あか 2015/8/7 「sheet1」N列の日付を元にして、別シート(sheet2)のA2列に「開始日付(yyyy/mm/dd」、B2列に「終了日付(yyyy/mm/dd」(例:2015/8/1&#65374;2015/8/31)を入力し、フォームボタン(例:抽出)で検索を開始し、抽出された結果のsheet1のA列&#65374;G列、N列のみ(H列&#65374;M列は不要)をSheet2のA7以下へ表示したいと考えています。 A  B   C  D  E  F  G   N 2 みかん ××  BC  2526 ○   あお 2015/8/1 3 すいか ●●  BB  2429  ●  あか 2015/8/12 6 いちご ●□  LA  2429  ●  あお 2015/8/21 7 ぶどう □○  HK  2526  □  あか 2015/8/7 期間を指定し検索した結果を別のシートへ表示するにはどのようなVBAのコードを使用すれば良いでしょうか。 宜しくお願いします。

  • データ抽出方法

    おはようございます。 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

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A&#65374;Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00&#65374;17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A&#65374;H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • VBAを使った、Excelでのシート間データ抽出

    はじめまして。みなさまどうか教えてください。 Sheet1にはA列に250行程、コードが存在します。 Sheet2にはA列(コード)からI列まで、そして1000行程データが存在します。 Sheet1にあるコードは重複はなく、Sheet2のコード内に必ず同じコードがあります。 Sheet2にも重複コードはありません。 そこでSheet1のコードを使い、Sheet2を検索し、同一コードのデータ(A列からI列の行すべて)を全て(250件分)、Sheet1のコード記載順(A1、A2、A3・・・・)で、Sheet3に抽出したいのです。 どうか、よろしくお願いします。