• ベストアンサー

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

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

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

  • ベストアンサー
  • 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/17069)
回答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