- ベストアンサー
検索後、削除や抽出するマクロ
エクセルのシート1、A列の1~1500のセルにテキストが入力されており ある特定のテキストを含むセルを全て シート2のA列に抽出したいのですが、検索してみましたがうまくできません。 作業の流れとしては シート1のA列を範囲指定し、編集-検索、検索する文字列を入力し、すべてを検索をクリック 検索結果をコピーし、シート2のA列に貼り付ける もうひとつはシート1、A列の1~1500のセルにテキストが入力されており テキスト1またはテキスト2を含むセルを全て削除するというマクロを作成したいです。 ご指導のほどよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> ある特定のテキストを含むセル 含むということは、完全一致ではなく部分一致検索なのですね? ではとりあえず検索してSheet2に転記する一例を Sub test01() Dim ws1 As Worksheet, ws2 As Worksheet Dim rng As Range Dim myStr, ra, rr myStr = InputBox("検索する文字", "入力してください", "") If myStr = "" Then MsgBox "検索文字未指定", vbCritical, "" Exit Sub End If Set ws1 = Sheets("Sheet1") '検索 シート Set ws2 = Sheets("Sheet2") '貼付先シート With ws1.Columns("A") '部分一致でシートの頭から検索(A列) Set rng = .Find(What:=myStr, LookAt:=xlPart, After:=.Cells(.Cells.Count)) If rng Is Nothing Then MsgBox "ありません", vbCritical, myStr Else ra = rng.Address '最初に見つかったセルアドレス Do rr = rr + 1 rng.Copy Destination:=ws2.Cells(rr, 1) Set rng = .FindNext(rng) '連続検索 Loop While rng.Address <> ra Set rng = Nothing End If End With Set ws1 = Nothing Set ws2 = Nothing End Sub
その他の回答 (3)
- n-jun
- ベストアンサー率33% (959/2873)
私なら、 Excel(エクセル) VBA入門:オートフィルタ(AutoFilter)でのデータ抽出 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html を使用します。 必要なデータを抽出して、別シートに貼付け。 或いは抽出された”可視セル”に対して、データの消去・空白行の上詰め を行なうでしょうか。 ご参考程度に。
お礼
オートフィルタでデータ抽出をマクロで行なうんですね。 こちらも参考し、作ってみたいと思います。 ありがとうございました!
- imogasi
- ベストアンサー率27% (4737/17069)
編集ー検索の操作をして、マクロの記録をとってみましたか。 特定の文字列を含む行がA列に複数有るようだから、1つ見つかった後、次々と検索する必要がある。 最初から見つからない場合はどうなるか研究。 (行番号管理法) そしてプログラムでは、FindNextのクリックを、最初に見つかった行に回帰したとき、検索は一巡したとして、検索処理を止める。 ということは最初に見つかった行を変数に記憶しておく必要が有るということ。 (オブジェクトのNothing管理法) 他にNothingになるとやめる方法もある。 ーー 質問は ●マクロの記録をまずとる ●Googleで「エクセル VBA Find FinNext」で照会し、よさそうなもの2,3をよく読んで、それでも行き詰った点を質問すること。 ーー 後半は前半質問が出来ることが基礎になるが、検索する文字列が2つ有るということなので。検索語1つずつ2回実行するのが易しいかと思う。
補足
マクロの記録はやってみたんですが、「すべて検索~結果をコピーする」ができませんでした。 エクセル 検索マクロ などで検索し昨日中調べましたがわかりませんでした。 よろしくお願い致します。
- imogasi
- ベストアンサー率27% (4737/17069)
編集ー検索の操作をして、マクロの記録をとってみましたか。 特定の文字列を含む行がA列に複数有るようだから、1つ見つかった後、次々と検索する必要がある。 最初から見つからない場合はどうなるか研究。 そしてプログラムでは、FindNextのクリックを、最初に見つかった行に回帰したとき、検索は一巡したとして、検索処理を止める。 ということは最初に見つかった行を変数に記憶しておく必要が有るということ。 他にNothingになるとやめる方法もある。 ●マクロの記録をまずとる ●Googleで「エクセル VBA Find FinNext」で照会し、よさそうなもの2,3をよく読んで、それで行き詰った点を質問すること。 ーー 後半は前半質問が出来ることが基礎になるが、検索する文字列が2つ有るということなので。検索語1つずつ2回実行するのが易しいかと思う。
お礼
そのまま登録してみましたらできました!! 感謝いたします。 まことにありがとうございました。