• ベストアンサー

エクセルである文字を検索させてヒットしたものを行ごと消去する方法

現在エクセル2000を使っています。 そこにデータがあるのですが A列・B列・C列・D列・E列・F列 までをつかって作ってあります。 文字を検索してその文字がヒットする 行ごとを消去する場合はどのようにすれば よろしいでしょうか? どの列でも、その文字が入っている場合は 行ごと消したいのですが。 そして、その行は空白になるのではなく 詰めたいのです。 例えば 111111111 222222222 333333333 となっているデータで2を消すとして 111111111 333333333 となるのではなく 111111111 333333333 とゆうように詰めて作りたいのです。 すみませんが、よろしくお願いします。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.7

部分一致に直しました。 セルI1の内容が含んでいる行が削除されます。 これで如何でしょうか? Sub DelRows() Dim Rw As Long Dim ColMax As Integer Const FindData = "H1" '<------ 検索するデータを指定するセル Const DataTop = 2 '   <------ データのトップ行指定 Dim col As Integer If IsEmpty(range(FindData)) Then Exit Sub ColMax = range("A1").CurrentRegion.Columns.Count For Rw = range("A1").CurrentRegion.Rows.Count To DataTop Step -1   For col = 1 To ColMax     If InStr(Cells(Rw, col).Value, range(FindData).Value) > 0 Then       Rows(Rw).Delete       Exit For     End If   Next col Next Rw End Sub

syousyou
質問者

お礼

す、すばらしいです。(涙) できました。ありがとうございます。 最近、手作業での作業にものすごく限界を 感じていて放置になりぎみだった 作業が一気にできました。 無知はおそろしいです。 ここ何年かの自分がアフォに見えました(笑) 最近いろいろとここで、お世話になっており 大変助かっております。  いままで、こんなことできないかー と思っているものが次々と解決させていただいております。 また、質問のコーナーに登場させていただきます。 何かありましたらよろしくお願いします。

その他の回答 (6)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.6

> 【I1】には、検索して引っかかったら消す > ための検索文字をいれればよろしいですよね。 その通りです。 > ●が含まれる列を行ごと消去するわけです。 > どこがまちがえてしまったのでしょうか。 間違っては、おりません。 > 4行目のところは、【I1】と指定を変えさせて・・・ これですと、セルI1 に入力した内容と同じデータが入っているセルが、見つかると その行を削除します。 例えば、セルI1に "東京" と入力して実行した場合は、データ範囲内の"東京"と入って いるセルがあれば、その行を削除します。 "東京都" は、削除しません。部分一致では、ありません。 もしかして、部分一致ですか? あっ、ごめん!! 今読み直したら、部分一致でした。 ちょっと待ってね。   ↓ 無視して あと確認ですが、データ範囲内に全てが空欄の行、または、全ての行が空欄の列が ありますか。 つまり、データが空白で分断されていませんか? ということです。 そういうデータ構造でなく、連続していれば、うまく行く筈です。 データがあるシートをアクティブにした状態で DelRows()を実行します。 ダメなときは、どのようになるのか、書いてもらえますか? かなりのデータ量らしいのですが、メモリに関するエラーですと、VBAで一挙に 対処することは、難しいと思います。 この辺は、Excelの宿命でぇ~す。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.5

削除するデータを何処で指定するかが書いておりませんので、取り敢えず 操作性を考慮し、セルH1で指定するようにしました。 これは、4行目で変更できます。データ範囲の右端から2列離して指定してください。 5行目でデータの先頭行を指定します。 一応、VBA設定の手順を書いておきます。 1.Alt + F11 で VBE(Visual Basic Editor)を開きます。 2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。 3.モジュールウィンドウに下記コードをコピーして貼り付けます。 4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 5.実行するときは、メニューから[ツール]-->[マクロ]-->[マクロ]で  「DelRows」を指定し、[実行]ボタンを押します。 Sub DelRows() Dim Rw As Long Dim ColMax As Integer Const FindData = "H1" '<------ 検索するデータを指定するセル Const DataTop = 2 '   <------ データのトップ行指定 Dim col As Integer If IsEmpty(range(FindData)) Then Exit Sub ColMax = range("A1").CurrentRegion.Columns.Count For Rw = range("A1").CurrentRegion.Rows.Count To DataTop Step -1   For col = 1 To ColMax     If Cells(Rw, col).Value = range(FindData).Value Then       Rows(Rw).Delete       Exit For     End If   Next col Next Rw End Sub

syousyou
質問者

補足

お答えありがとうございます。 さっそくためさせていただいたのですが 申し訳ございません、うまくできませんでした。 現在いじっているデータは F列まで、仕様していますので 4行目のところは、【I1】と指定を変えさせて いただきまして、データのトップ行は 【2】行目からスタートとさせていただきました。 【I1】には、検索して引っかかったら消す ための検索文字をいれればよろしいですよね。 このようにしました  A B C D E F G H I 1                 ● 2 あ あ あ あ あ あ 3 い い い い い い 4 う う う う う う 5 え え え え え え で、●が含まれる列を行ごと消去するわけです。 どこがまちがえてしまったのでしょうか。 すみません、無知でご迷惑をおかけします。

noname#4564
noname#4564
回答No.4

レコードが5万件もあるのであれば、DAOかADOを使用してSQLで処理し、加工後の 結果を表示した方が速いです。

syousyou
質問者

補足

DAO・ADO、、、 ちょっと調べて今後の対策を 練らせていただきます。 ありがとうございました。

  • GETSTREET
  • ベストアンサー率18% (14/74)
回答No.3

Sub 検索() Dim 検索 As String, 行番号 As String 検索 = InputBox("検索条件") Cells(1, 1).Select If 検索 = "" Then MsgBox "検索条件を入力してください。", 48, "検索条件" Exit Sub End If On Error GoTo Fail Cells.Find(What:=検索, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ ).Activate 行番号 = Selection.Row Rows(行番号).Select Selection.Delete Shift:=xlUp Cells(1, 1).Select Exit Sub Fail: MsgBox "NOTHING", 48, "検索" End Sub ---------------------------------------------------------------------- これはA列のみで検索します。また、1命令1実行です。 こんな感じでどうですか?自信ないです。すいません

syousyou
質問者

お礼

お答えありがとうございました。 解決することができました。 また、質問をすることが あると思います。 その時はよろしくお願いします。

  • dai-cha-n
  • ベストアンサー率27% (12/43)
回答No.2

セオリーじゃないかもしれませんが、私なら、 A列~F列を全部結合したセルをG列に作成 (G1:=A1&B1&C1&D1&E1&F1 みたいな感じ) [データ]-[フィルタ]-[オートフィルタ] G列のフィルタで一覧から[オプション]を選択 ○○ を含む を選択 選択された行を選ぶ 右クリック⇒[行の削除]を選択 こんな感じで消しちゃいます。

syousyou
質問者

補足

お答えありがとうございます。 セルを結合させてしまうと データ的にこまりますので 申し訳ございませんでした。 今後この手で使える時が あるとおもいます。 その時にありがたく使わせていただきます。

  • zzz9323
  • ベストアンサー率25% (3/12)
回答No.1

1行選択しておいて 右ボタン-削除で行削除ができます。 これではいけないのですか?

syousyou
質問者

補足

お答えありがとうございます。 手作業ではなく、自動で ヒットするものをすべて一括で 消す方法を探しているところになります。 データ量が5万程度になりますので 手作業では無理があるためです。 説明がたりなく申し訳ございませんでした。

関連するQ&A