プロが教えるわが家の防犯対策術!

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

例えば
111111111
222222222
333333333

となっているデータで2を消すとして

111111111

333333333

となるのではなく

111111111
333333333

とゆうように詰めて作りたいのです。


すみませんが、よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/28 17:46

> 【I1】には、検索して引っかかったら消す


> ための検索文字をいれればよろしいですよね。

その通りです。

> ●が含まれる列を行ごと消去するわけです。
> どこがまちがえてしまったのでしょうか。

間違っては、おりません。

> 4行目のところは、【I1】と指定を変えさせて・・・

これですと、セルI1 に入力した内容と同じデータが入っているセルが、見つかると
その行を削除します。

例えば、セルI1に "東京" と入力して実行した場合は、データ範囲内の"東京"と入って
いるセルがあれば、その行を削除します。

"東京都" は、削除しません。部分一致では、ありません。
もしかして、部分一致ですか?

あっ、ごめん!! 今読み直したら、部分一致でした。 ちょっと待ってね。
  ↓ 無視して

あと確認ですが、データ範囲内に全てが空欄の行、または、全ての行が空欄の列が
ありますか。
つまり、データが空白で分断されていませんか? ということです。
そういうデータ構造でなく、連続していれば、うまく行く筈です。

データがあるシートをアクティブにした状態で DelRows()を実行します。

ダメなときは、どのようになるのか、書いてもらえますか?

かなりのデータ量らしいのですが、メモリに関するエラーですと、VBAで一挙に
対処することは、難しいと思います。 この辺は、Excelの宿命でぇ~す。
    • good
    • 0

削除するデータを何処で指定するかが書いておりませんので、取り敢えず


操作性を考慮し、セル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

この回答への補足

お答えありがとうございます。
さっそくためさせていただいたのですが
申し訳ございません、うまくできませんでした。
現在いじっているデータは
F列まで、仕様していますので
4行目のところは、【I1】と指定を変えさせて
いただきまして、データのトップ行は
【2】行目からスタートとさせていただきました。

【I1】には、検索して引っかかったら消す
ための検索文字をいれればよろしいですよね。

このようにしました
 A B C D E F G H I
1                 ●
2 あ あ あ あ あ あ
3 い い い い い い
4 う う う う う う
5 え え え え え え

で、●が含まれる列を行ごと消去するわけです。
どこがまちがえてしまったのでしょうか。
すみません、無知でご迷惑をおかけします。

補足日時:2003/03/28 15:57
    • good
    • 0

レコードが5万件もあるのであれば、DAOかADOを使用してSQLで処理し、加工後の


結果を表示した方が速いです。

この回答への補足

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

補足日時:2003/03/28 17:46
    • good
    • 0

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実行です。
こんな感じでどうですか?自信ないです。すいません
    • good
    • 0
この回答へのお礼

お答えありがとうございました。
解決することができました。
また、質問をすることが
あると思います。

その時はよろしくお願いします。

お礼日時:2003/03/28 17:48

セオリーじゃないかもしれませんが、私なら、


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

こんな感じで消しちゃいます。

この回答への補足

お答えありがとうございます。
セルを結合させてしまうと
データ的にこまりますので
申し訳ございませんでした。

今後この手で使える時が
あるとおもいます。
その時にありがたく使わせていただきます。

補足日時:2003/03/28 16:08
    • good
    • 0

1行選択しておいて 右ボタン-削除で行削除ができます。



これではいけないのですか?

この回答への補足

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

補足日時:2003/03/28 15:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!