• ベストアンサー

Excel複数列の複数の条件を満たしたデータを抽出

2列(N列,O列)に1~3の数字が入ってる行を、指定したsheetへ抽出させるVBAのマクロを 作成したいのですが、VBAが全く分からず困っています。 または、Excel上でも簡単に上記の事が出来るのでしたら、その方法も教えて下さい。

  • nniro
  • お礼率73% (14/19)

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1に追加です >または、Excel上でも簡単に上記の事が出来るのでしたら、その方法も教えて下さい。 例えば、P列を作業列として使用し、セルP2に以下の数式を入れて データの行数分オートフィルします。 =(1<=N2)*(N2<=3)+(1<=O2)*(O2<=3) 1行目(項目列)を選択し、データからフィルタを選択。 P列のフィルタ「▼」を選択して、「0」のチェックボックスを外す。 抽出したい範囲を選択して右クリックからコピーの後に、対象シートのセルを右クリックして「形式を選択して貼り付け」より対象データの貼付け。 P列の値は上記数式では、N及びO列が1~3の数値の場合は2、N又はO列が1~3の数値の場合は0、どちらも当てはまらない場合は0となります。

nniro
質問者

お礼

eden3616さん、Excel上でのやり方についても教えて頂きありがとうございました。なーるほどですね。こちらも感謝、感謝です。本当に助かりました。

その他の回答 (3)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.4

No2訂正です。 >P列の値は上記数式では、N及びO列が1~3の数値の場合は2、 >N又はO列が1~3の数値の場合は0、 >どちらも当てはまらない場合は0となります。 上記箇所ですが、以下の通り訂正いたします。 N又はO列が1~3の数値の場合は0、      ↓ N又はO列が1~3の数値の場合は1、

nniro
質問者

お礼

訂正コメントを頂きまして、ありがとうございました。 Excel上と、VBAマクロと両方のご教示ありがとうございました。 たいへん勉強になりました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

画像がぼやけて、わたしには、はっきり見えない。 OKWAVEのこの質問を前提にして、画像を、はっきり見る方法を、質問者が知っていたら教えてほしい。 5列程度の5行程度程度の狭いセル範囲なら、画像も大きくなってはっきり見えるばあいもあるが。 画像に頼る質問者が多く、見ればわかるだろうということか、質問の内容説明がおろそかになっている売位が多くて困る。 ーー >(N列,O列)に1~3の数字が入ってる行を N,O列は文字列のデータが入っているセルなのか? それなら画像を張り付けなくても、2,3の例をテキストで質問に例示すれば仕舞ではないか。 >N列でもO列でも1か2か3の文字(半角全角でもか)が入っていたら抜き出すのか? 読者や回答者の立場も考えて、文章を書き、画像も貼ってほしいよ。

nniro
質問者

お礼

仕様が不明瞭の件、申し訳ありませんでした。 eden3616が想定した通りの事がしたい事でした。 マクロありがとうございました、修正する事なく出来ました。 感謝、感謝です、今後ともよろしくお願いします。 質問する時は、仕様を具体的に書けるようにしたいと思います。

nniro
質問者

補足

全く、おっしゃる通りです、申し訳ありません。 お礼のコメントについても、誤ってコメントしてしまいました。 以後、上記の事を考えて質問するように致します。 eden3616さんのご教示のおかげで、データを便利に処理する事が出来ました。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

>Excel複数列の複数の条件を満たしたデータを抽出 >2列(N列,O列)に1~3の数字が入ってる行を、 >指定したsheetへ抽出させるVBAのマクロを 仕様が不鮮明のため、こちらで判断したうえで想定して作りました。 (1)Alt+F11でVBEを開き、挿入から標準モジュールを挿入。 (2)最下のVBAコードを貼り付けてコード内の「設定」の5項目を設定。 (3)右上の「×」でVBEを閉じる。 (4)抽出元のシートを表示している状態でAlt+F8より「sample」を実行。 想定した箇所は以下の3点です。異なっていれば補足願います。 (1)抽出条件が不明確です 「複数の条件を満たした」「N列、O列に1~3の数字」とありますが、 『N列及びO列の値が両方とも1~3の数字の場合』は抽出対象と思われますが、 以下の2通りの場合は抽出対象でしょうか? ・N列に1~3の数字があり、O列が空欄または条件外の値の場合 ・O列に1~3の数字があり、N列が空欄または条件外の値の場合 →N、O両方、NまたはOのどちらかに1~3の数字がある行を対象とします。 (2)抽出データについて(画像が不鮮明なため) 1行目は項目行でしょうか?また、間は空白セルがあるようですが、 データの入っている最終行番号を取得するため、空白セルのない列はありますか? →抽出対象のデータ範囲は2行目~A列の最終データが入っている行とします。 (3)抽出範囲及び抽出先が不明確です 新規のシートに行を複写するのであれば、行ごとコピーしますが 特定のシートへ抽出という事は特定の様式(フォーマット)に 値を貼り付けるということであれば、処理内容が異なります。 →抽出範囲は「条件に一致する各行のA~O列」を特定シート「Sheet2」のセル「A1」を基準として値で貼り付けます。 ■VBAコード Sub Sample() '//////////設定////////// '抽出先のシート名を指定 Const ts As String = "Sheet2" '抽出先の起点となるセルアドレスを指定 Const tr As String = "A1" 'データ範囲の開始行番号を指定 Const sr As Long = 2 'データ範囲の最終行番号を判定する列記号 '(全ての行に値が入っている列記号を指定してください) Const tc As String = "A" 'コピーする内容を指定 '  全て:xlPasteAll '  数式:xlPasteFormulas '  輪郭以外の全て:xlPasteAllExceptBorders '  値:xlPasteValues Const po As Integer = xlPasteValues '//////////以下は変更不要////////// Dim i As Long, j As Integer, cnt As Long Application.ScreenUpdating = False For i = sr To Cells(Rows.Count, tc).End(xlUp).Row   If (1 <= sCd(Cells(i, "N").Text) And sCd(Cells(i, "N").Text) <= 3) _    Or (1 <= sCd(Cells(i, "O").Text) And sCd(Cells(i, "O").Text) <= 3) Then     Cells(i, "A").Resize(1, 15).Copy     Worksheets(ts).Range(tr).Offset(cnt, 0).PasteSpecial _       Paste:=po     cnt = cnt + 1   End If Next i Application.CutCopyMode = False Application.ScreenUpdating = True MsgBox "終了" End Sub Function sCd(s As String) As Double   If IsNumeric(s) = True Then sCd = CDbl(s) Else sCd = 0 End Function

nniro
質問者

お礼

仕様が不明瞭の件、申し訳ありませんでした。 eden3616が想定した通りの事がしたい事でした。 マクロありがとうございました、修正する事なく出来ました。 感謝、感謝です、今後ともよろしくお願いします。 質問する時は、仕様を具体的に書けるようにしたいと思います。

関連するQ&A

  • エクセル 複数条件抽出について

    エクセル2013を使用しています。 データシートより複数条件に当てはまるデータを 別のシートへ必要な項目のみ抽出する方法(関数orマクロ)をお教え下さい。 データシート:A列からU列まで様々なデータが入力されている。 抽出条件:H列とN列 抽出する項目:C列・I列・M列・O列・Q列・R列・S列 (抽出する項目は増える可能性有) 複数条件の抽出はフィルタオプションで出来たのですが、 抽出が必要な項目を指定する方法が分かりませんでした。 宜しくお願いします。

  • 複数条件でのデータ抽出について

    こんにちは。エクセルのVBAを勉強中ですが、 どうしてもわからないので助言をお願いします。 品名 規格 詳細 適合 1   A   B   ○ 2   A   B  3   A   C   ○ このような文字列があり、 複数条件を指定して、たとえば「Aと○」を両方含む行を抽出し 別のシートへコピーしたいと思っています。 AdvancedFilterを使おうと思っていますが、 どうも使い方がよくわかりません。 よろしくお願いします。

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

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

  • EXCEL:ゼロ以外のデータを詰めて抽出する方法

    初めて投稿します。よろしくお願いいたします。 EXCEL2000を使用しています。 オートフィルタを使わずに 関数でデータを抽出する方法で悩んでいます。 下記<データ>が存在しています。 2行目がゼロ以外のものを、 別シート<抽出>に上から詰めて抽出したいのです。 <データ>   A列 B列 C列 D列 E列 1行 1  2  3  4  5  ←日付 2行 5  3  0  2  0  ←数字 <抽出>別シート   A列 B列  1行 1  5 2行 2  3 3行 4  2   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • 必要なデータを抽出したい

    必要なデータを抽出したい    A   B    C   D ・・・ 1 7/1   101   102  103 2 7/2   101   103 3 7/3   105   203 4 7/4   103   205 5 7/5   101   202 ・ ・    ・ ・ ・    ・ ・ ・    ・ Excelで上の様にA列に日付、B行列以降に数字が書かれているシートから、抽出したい数字が含まれている行を別シートに抽出するマクロはどのように書けばよろしいのでしょうか。 技術者の方、よろしくお願いします。 例えば、101が含まれているデータを抽出したら、sheet2に    A   B    C   D 1 7/1   101   102  103 2 7/2   101   103 3 7/5   101   202 となるようにしたいのです。

  • Excel2013 同一列の抽出

    Excelの使い方について、教えていただいたく思います。 Win7 Excel2103を使用しています。 とあるデーターの同一行にて、A列、B列の値が同一のものだけを抽出する方法を探しております。 当方、あまりExcelに詳しく無い為、よろしくお願い申し上げます。 【例】       A列      B列 1行目   123     234 2行目   567     123 3行目   123     123 4行目   234     123 5行目   234     234 6行目   234     567 ・ ・ ・ 3行目、5行目がA列、B列が同一の為、抽出できないでしょうか? 該当行の色分け、不要行の削除等、方法は問いません。 宜しくお願い申し上げます。

  • Excel2007 複数列に対する抽出条件の設定

    Excel2007を使用しています。 下記のような抽出をVBAで行いたいのですが、条件の指定方法が分からず困っています。 ご存知の方がいらっしゃいましたら、ご教授願います。 A列 B列 C列 D列 1   あ  22 2   い      全 3   う   21  部分 4   え   22 5   お   6   か   23  部分 7   き   22 8   く    21  全 9   け 10  た   22  部分 11  ち ↓↓↓↓↓↓ A列 B列 C列 D列 1   あ  22 2   い      全 3   う   21  部分 4   え   22 6   か   23  部分 7   き   22 8   く    21  全 10  た   22  部分 【やりたい事】 C列が空白かつD列が空白の行を削除したい。 ※A列B列は連番や続いた文字が入っているのではないのですが、便宜上こう書きました。 ※C列には数値、D列には文字列が入っています。 宜しくお願い致します。

  • EXCEL 文字列条件抽出

    特定の文字列を検索条件として別シートに抽出する方法を御教授願います。 使用する関数はLEN,MID,LEFT,ISERR,もしくはワイルドカードなどを使用すればいいのかと考えておるのですがいまいちやりたいような数式を組めず悩んでおります。 やりたいことを言葉で表現するならば以下のような感じとなります。 「sheet1のF列に<107>という文字が含まれていた場合」 ・顧客別シートのD列に顧客ごとに分けて抽出 ・含まれていない場合、抽出しない と、単純なことなのです。が、制約がある為にうまくいきません。 制約は以下となります。 ・検索対象の文字列が以下のように決まった形ではない。 (1)A-BB-107○#----- (2)A-BB-107○#----- (3)ABB107○C #----- (4)ュウリABB-107○#----- (5)ュウリABB107○#----- (6)BB-107○C-D9#-----  など、その他にも数種類存在。(○部分には違う数字が入ります) ・上記でも分かるように<107>が始まる文字列の位置が決まっていない。 という具合です。 操作しているブック構成は下記のとおりです。 ・sheet1・・・参照用シート 4行目 /D列・・・顧客No / E列・・・顧客名 / C列・・・製品仕様 (A列,B列,G~AD列まで使用中) 5行目 / 1 / A / A-BB-107○#----- 6行目 / 2 / B / ュウリABB-107○#----- 7行目 / 1 / A / BB-107○C-D9#----- 8行目 / 3 / C / A-BB-107○#----- 9行目 / 3 / C / BB-107○C-D9#-----  10行目 / 4 / D / A-BB-107○#----- (会社のサーバーで管理している情報がそのままエクセルに打ち出されたシート。 情報量として約1000行ほど) ・sheet2,3,4,5(開始行,項目列は同じ位置)・・・特定の顧客別ごとに分け、特定の製品仕様だけを抽出したシート(参照用から引用)。 4行目/ B列・・・顧客No / C列・・・顧客名 / D列・・・製品仕様 5行目 / / A-BB-107○#----- 6行目 / / ュウリABB-107○#----- 7行目 1 / A / BB-1234C-D9#----- 8行目 / / A-BB-1115#----- 9行目 / / BB-107○C-D9#-----  10行目 / / A-BB-3498○#----- 特定の顧客NoをB列(一つのセルになってます。C列も同様一つのセルになってます)に入力すると、製品仕様すべてを抽出するように作成したシート。このシート内のG列から新たに表を作成し<107>の文字列が含む製品仕様を抽出しようと考えております。 出来れば、このような一度段階を踏んでから特定の仕様を抽出するのではなく各シートに対象となる顧客Noを入力すると特定の仕様が一回で抽出できるようなシートを作成したいのですが、関数初心者の為、うまく組めずこのような形となりました。(現在、参照用シートに作業列を作り対応。作業列ばかりが増えて正直困っているのも確かなのです) 【御教授頂きたいこと】 ・<107>の文字列を条件として別表に抽出する関数の数式 です。 また、出来ればでいいのですが、 ・顧客Noを入力すると特定の仕様が一回で別表に抽出できるような方法が御座いましたら、そちらも合わせてお願いしたいと思っております。 長々と書き綴り、大変申し訳御座いませんが、宜しくお願い致します。

  • 複数のExcelブックから特定シートのセル範囲抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル範囲を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 このサイトで殆どよく似た回答を読んだのですがうまくいきません。VBA初心者です。 よろしくお願いします。 【前提】 ・実行する端末のOSはWindows 10 ExcelはOffice365 ProPlus ・対象フォルダはネットワーク接続フォルダ  この中に、複数のExcelブック(xlsx、xlsm)があります。 ・抽出したい対象は、各ブック内の「台帳」シートの「A3:Cの最終行」で  複数のブックの中には「台帳」シートが含まれていないブックも混在しています。 【抽出一覧作成イメージ】 ・「集約.xlsm」ブックの「集計」シートの2行目から抽出した結果を一覧表示する。 ・「集約.xlsm」ブックにマクロは登録する ・表示はA列に抽出元ブック名(=ファイル名)、B列からD列に抽出元「A3:Cの最終行」セルの値。 ・「A3:Cの最終行」セルの値を「集約.xlsm」ブックの「集計」に貼り付ける際には「値で貼り付ける」が望ましい。

  • エクセルで複数の条件範囲に合う行を別シートに抽出

    エクセルの関数で複数の条件範囲に合う行だけをを別シートに抽出したいのですが、 どうしても方法が分かりません。 誰か教えて頂けないでしょうか? 検索は範囲です。 宿泊日○○○○○○○○~○○○○○○○○(例20111110~20240204) 人数 ○人~○人 (○の中に数字が入ります) 西暦日付と人数が両方一致している行を別シートに抽出したいです。 バージョンは2007.2010両方とも問題ないです。 Sheet1    A     BCDEFGHIJKLMN   O 1 宿泊日                 人数 2 20100223               20 3 20110103               5 4 20111118               9 5 20120505               13 6 20121010               7 8 20120224               32 9 20121121               28 Sheet2    A      B    C   D    E   FGHIGKLMN    O 1 検索 2 宿泊日 20110101 ~ 20121111 3 人数     8    ~   30     人 4 5 宿泊日                                  人数 6 20111118                                   9 7 20120505                                  13 Sheet1、A列の宿泊日とO列の人数の範囲が一致するものを、 Sheet2の検索から、行ごと抽出(複数)し、Sheet2に反映する関数を教えて頂けないですか? いろいろ検索して探しましたが、複数抽出する方法がわかりませんでした。 よろしくお願いいたします。

専門家に質問してみよう