Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 : Excel 2016)
指定した文字列を含む行とその周辺の行を一括で抽出したい
投稿日時: 19/01/10 23:18:42
投稿者: はりぼっくす

エクセルで指定した文字列を含む行とその周辺の行を抽出したいです。
 
下記のようなリストがあったとして
-------------------------------------------------------------
戦略的ブランド・マネジメント ケビン・レーンケラー
                                      1,200円
伝説のコピーライティング実践バイブル ロバートコリアー
                                      1,200円
マーケティング入門 小川孔輔
                                      1,140円
ゲーム理論 新版 岡田章
                                      1,140円
----------------------------------------------------------------
 
戦略的ブランド・マネジメント,マーケティング入門と指定したら、
 
-------------------------------------------------------------
戦略的ブランド・マネジメント ケビン・レーンケラー
                                      1,200円
マーケティング入門 小川孔輔
                                      1,140円
----------------------------------------------------------------
 
となるようにしたいです。
ここでは少ないリストになってますが実際は数千行の中から1000項目ほど抽出したいです。指定する文字列はカンマ等で区切って一度に複数指定したいと思っています。
あと、このリストでは2行ずつですが実際は項目ごとに行数はまちまちです。
他のサイトでも質問させていただき、そこでは一度解決済みのコメントを出したのですが改めて試したところうまく全ての文字列が抽出できなかったので改めてここで質問させていただきます。
上記のような処理をするにはどのようなマクロを使ったら良いですか?

回答
投稿日時: 19/01/11 00:06:31
投稿者: simple

>他のサイトでも質問させていただき、
そこでの議論を繰り返すことは無駄ですので、
そのサイトのurlを示して下さい。

回答
投稿日時: 19/01/11 00:13:32
投稿者: simple

> あと、このリストでは2行ずつですが実際は項目ごとに行数はまちまちです。
まちまちの行数があるとのことですが、
マッチした文字列はもちろん入れるのですが、
そのあと何行を併せて抽出するのかの条件が不明です。
抽出するべき行はどうやって判定するのか、理屈を説明してください。
 
それと、データは1つの列に入っているのですか?
PC画面を除いていない人にもわかるような説明が必要です。

投稿日時: 19/01/11 00:14:50
投稿者: はりぼっくす

失礼しました。こちらです。
http://www.excel.studio-kazu.jp/kw/20190108133443.html

投稿日時: 19/01/11 00:58:29
投稿者: はりぼっくす

データは1列ではありません。
今回のリストはあるサイトの高価買取リストなのですが、これで言えば商品名がA列、著者名と価格がB列です。
質問のためのリストなので意味のあるものではないです。
 
抽出するための条件ですが、商品名を複数指定し、A列にマッチしたセルがあった場合、そのセルの行とその下に続く空白セルの行を全て抽出したいです。
そしてまたA列に文字列があったとき、それがマッチしなかった場合その行とその下に続く空白セルの行は無視し、またマッチするセルがあったらその行とそこから下の行を抽出…というを繰り返して質問で書いたような感じにしたいです。
上のコメントで載せたエクセルの学校というサイトで教えていただいたマクロでは、ほとんど希望通りの動作をしたのですが何故かいくつかの項目しか抽出されませんでした。
一度解決済みかのようなコメントをしてしまったため、こちらの方で改めて質問させていただきました。

回答
投稿日時: 19/01/11 11:50:39
投稿者: WinArrow
投稿者のウェブサイトに移動

他のページでは、
最後に文字列制限(桁数)については、どうなんですか?
という質問がありますが、
それは検討されたのでしょうか?
 
INPUTBOXで受け取れる桁数は、全角文字で160文字という制限があります。

投稿日時: 19/01/11 12:14:15
投稿者: はりぼっくす

一度解決したと言ってしまったので、もう見てないかと思ったのですがエクセルの学校の回答者様に回答していただけたようで、どうやら文字数制限に引っかかっていたようです。
やはり大量の文字列での抽出は無理なのですかね?

回答
投稿日時: 19/01/11 14:34:50
投稿者: WinArrow
投稿者のウェブサイトに移動

INPUTBOXで入力可能な文字列の桁数に制限があるので
 
検索文字列を指定するのに、
INPUTBOXを使わない方法
または、
INPUTBOXでは1つづつ入力させる
などを工夫すればよいのでは?

投稿日時: 19/01/11 15:53:10
投稿者: はりぼっくす

コメントありがとうございます。
ただ、今の所InputBox以外では少し思いつかないです。
項目数が多いので1つずつやるのも現実出来ではないかなあと。すみません。
VBAって奥が深いですね。

回答
投稿日時: 19/01/11 16:01:27
投稿者: Suzu

先のサイトではスルーされていますが、フィルターオプションを使用するのが、
スッキリ すると思うのですが・・・
  
  
ユーザー操作
・抽出条件を別シートに入力
 
Sheet2
--------------------
     A
1 項目1
2 りんご
3 ばなな
-------------------
の様に。
 
・ボタンを押す
  
 
 
マクロ操作
・リストの空白部分を埋める
・リストの追加した部分のフォントを白色に変える
・別シートに入力された条件でフィルターオプションを実行
  
  
これくらいなら マクロの自動記録でいけますよね?

投稿日時: 19/01/11 16:06:42
投稿者: はりぼっくす

ありがとうございます。
今試させていただきます。

投稿日時: 19/01/11 17:14:05
投稿者: はりぼっくす

エクセルの学校の方の回答者様がまだ質問を見てくださっており、最後まで回答していただけました。
そちらの方で希望通りの回答が得られたのでこちらは解決済みとさせていただきます。
そのURLはこちらです。
http://www.excel.studio-kazu.jp/kw/20190108133443.html
 
ご迷惑をお掛けして申し訳ありませんでした。
コメントをくださった皆さんありがとうございました。