• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:条件にマッチする行を抽出するVBAを教えてください)

Excel VBAで条件にマッチする行を抽出する方法

このQ&Aのポイント
  • Excelで特定の条件にマッチする行を抽出するVBAプログラムの例を紹介します。
  • D3またはE3に入力された条件に合致する行だけが抽出され、リアルタイムで結果が変更されます。
  • 本記事では、フィルタオプションを使用して抽出結果を表示する方法と、VBAを使用して抽出結果を別のシートにコピーする方法を解説します。

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

  • ベストアンサー
回答No.2

追記: では、当方で検証したサンプルコードを載せますので、ご参考に。結果提示用に「抽出結果」と名付けたまっさらなシートを予め用意しておいてください。 と、その前に注意点。 ご質問内容では、シートモジュールや標準モジュール等、複数のモジュールにコードが分散していますが、今回の処理内容では、モジュールを分ける意味がありません。シートモジュールのワークシートチェンジイベント1本で十分です。従って、ご案内するコードは、一覧表のあるシートのシート見出しを右クリック→コードの表示から呼び出した画面に書き込み、入力が終わったら、ファイルタブ→終了してexcelに戻る、としてください。 それと、クライテリアを使うと、倉庫1の検索で倉庫10以降もピックアップされてしまうので、1は全角で10以降は半角にするなど、元ネタに区別をしてください。 また、利用者のなかにビギナーがいるのであれば、セルのロックと保護を使い、一覧シートのD3:E3しか操作出来ないようにする、入力規則を使って、商品1,商品2といったリストから選ばせる、等の工夫も考えられます。それらをどう併用するかによって適切なコードも変わってきますので、細部はご自身で調整してください。 Private Sub Worksheet_Change(ByVal Target As Range) If Application.Intersect(Target, [D3:E3]) Is Nothing Then Exit Sub Worksheets(”抽出結果”).[A1:C1000].ClearContents Range(”一覧表”).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _ (”検索条件”), Copytorange:=Worksheets(”抽出結果”).Range(”A1”) End Sub

tanako-gi-
質問者

お礼

サンプルコードを書いてくださったのも勿論ありがたかったのですが、注意点や特徴をよく説明してくださって、大変分かりやすかったです。 処理自体は、まだまだ多くの工程を経て完成に向かいますが、質問項目に関しては目標を達成でき、理解が深まったと感じます。 総じてyaritsusozaiさんおひとかたのみの回答でしたが、よいかたと巡りあえて幸運でした。 このプログラムと解説、大事に活用させていただきます。 ありがとうございました(*^^*)

その他の回答 (1)

回答No.1

抽出結果を1100行以降に書き出したのに、その後45~100行を選んでコピーしているのが意味不明ですが… AdvancedFilterのCopytorangeを、 :=Worksheets(”抽出結果”).Range(”A1”) にすれば、どこかに抽出したデータをさらに別シートにコピーするといったような”二度手間”は省けます。 もう一点、新たな抽出の際、前回抽出したものが残っているとごっちゃになる恐れがあるので、 AdvancedFilterを使う前に、 Worksheets(”抽出結果”).[A1:C1000].ClearContents などで、宛先をクリアにしておくと良いと思います。

tanako-gi-
質問者

補足

>抽出結果を1100行以降に書き出したのに、 >その後45~100行にコピーしているのが意味不明 すみません、データを少なくして実行チェックを行っていたので、それが残ってました… この部分は正しく100行以降にコピーするように直して実行しています。 >AdvancedFilterのCopytorangeを、 >:=Worksheets(”抽出結果”).Range(”A1”)にすれば、 それが…マクロを記録する際にも別シートは選べませんでしたし、 VBAコード側でこれを書き込んでみましたが、抽出結果が現れませんでした… >Worksheets(”抽出結果”).[A1:C1000].ClearContents >などで、宛先をクリアに これは確かにしておくべき、と思いました。ありがとうございます。

関連するQ&A

専門家に質問してみよう