VBA初心者です。お教え下さい。
タイトル通り複数の文字列(例えば「aaa」)を検索し、行ごと削除したいのですが、以下のコードでは、「aaa」を検索せず、一番上の行から削除されてしまいます。。。
どこがどう間違ってるかわかりません。
どうかよろしくお願いします。
Private Sub CommandButton1_Click()
Dim StrkeyWord(10) As String '検索した文字列
Dim IngStartRow As Long '検索結果の行
Dim FoundCell As Range
Dim SearchArea As Range
Set SearchArea = ActiveSheet.UsedRange '検索対象範囲
Set FoundCell = SearchAea.Find(what:=trkeyWord) '検索実行
If FoundCell Is Nothing Then Exit Sub '検索文字列が含まれるセルがない場合中断
StrkeyWord(1) = "aaa"
StrkeyWord(2) = "bbb"
StrkeyWord(3) = "ccc"
StrkeyWord(4) = "ddd"
StrkeyWord(5) = "eee"
StrkeyWord(6) = "fff"
StrkeyWord(7) = "ggg"
StrkeyWord(8) = "hhh"
StrkeyWord(9) = "iii"
StrkeyWord(10) = "jjj"
For i = 1 To 10
Cells.Find(what:=StrkeyWord).Activate '検索
IngStarRow = ActiveCell.Row '検索結果の行からの削除の場合
Rows((Str(IngStartRow)&":"&Cstr(IngStartRow)),Delete Shift :=xlUp '削除
End Sub
No.1ベストアンサー
- 回答日時:
こんばんは。
この全体のコードの設計の発想は、初心者の方には無理です。ミスしそうな部分が一杯ありすぎます。アイデア自体は否定しませんが、初心者の方には、難しすぎます。
Private Sub CommandButton1_Click()
Dim StrkeyWord(10) As String
Dim FoundCell As Range
Dim FirstCell As String
Dim SearchArea As Range
Dim UArea As Range 'Union でまとめていく
Dim i As Long
Dim j As Long
Set SearchArea = ActiveSheet.UsedRange '検索対象範囲
StrkeyWord(1) = "aaa"
StrkeyWord(2) = "bbb"
StrkeyWord(3) = "ccc"
StrkeyWord(4) = "ddd"
StrkeyWord(5) = "eee"
StrkeyWord(6) = "fff"
StrkeyWord(7) = "ggg"
StrkeyWord(8) = "hhh"
StrkeyWord(9) = "iii"
StrkeyWord(10) = "jjj"
Application.ScreenUpdating = False
With SearchArea
For i = 1 To 10
Set FoundCell = .Find( _
What:=StrkeyWord(i), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchDirection:=xlNext)
If Not FoundCell Is Nothing Then
Set UArea = FoundCell
FirstCell = FoundCell.Address
Do
Set FoundCell = .FindNext(FoundCell)
If FirstCell = FoundCell.Address Then Exit Do
Set UArea = Union(UArea, FoundCell)
Loop Until FoundCell Is Nothing
End If
If Not UArea Is Nothing Then
For j = UArea.Areas.Count To 1 Step -1
UArea.Areas(j).EntireRow.Delete
Next
End If
Set UArea = Nothing
FirstCell = ""
Next i
End With
Application.ScreenUpdating = True
Set SearchArea = Nothing
End Sub
お礼が遅くなり申し訳ありません。
思い通りの動きが確認できました!
ありがとうございます!
初心者には、難しい・・・。
コードを見て実感しました。
もっと勉強していきたいと思います!
No.2
- 回答日時:
こんなアルゴリズムはどうでしょうか。
どうせ消す行ですから、まず検索文字がある行のA列に削除サインを書き込みます。その後で削除サインが立っている行だけ削除します。
Private Sub CommandButton1_Click()
Dim StrkeyWord(10) As String '検索した文字列
Dim FoundCell As Range
Dim FirstAdrs As String
Dim SearchArea As Range
Dim i As Integer
Set SearchArea = ActiveSheet.UsedRange '検索対象範囲
StrkeyWord(1) = "aaa"
StrkeyWord(2) = "bbb"
StrkeyWord(3) = "ccc"
StrkeyWord(4) = "ddd"
StrkeyWord(5) = "eee"
StrkeyWord(6) = "fff"
StrkeyWord(7) = "ggg"
StrkeyWord(8) = "hhh"
StrkeyWord(9) = "iii"
StrkeyWord(10) = "jjj"
For i = 1 To 10
Set FoundCell = SearchArea.Find(StrkeyWord(i), LookIn:=xlValues)
FirstAdrs = ""
If Not FoundCell Is Nothing Then
FirstAdrs = FoundCell.Address
Do
Cells(FoundCell.Row, 1).Value = "DEL"
Set FoundCell = SearchArea.FindNext(FoundCell)
Loop Until FoundCell.Address = FirstAdrs
End If
Next i
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Cells(i, 1) = "DEL" Then
Rows(i).Delete
End If
Next i
End Sub
お礼が遅くなり申し訳ありません!
こうゆう考え方もあるのだ、と感心しました。
思いつきもしませんでした。。。
もっと勉強していきたいと思います!
ありがとうございました!!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) ワークブック内すべて検索 2 2022/12/20 20:13
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでセルに標準で入力さ...
-
お世話になります。 Excelを使...
-
エクセルでB列でフィルターをか...
-
EXCELの質問です 119から足した...
-
Excel VBについての質問です。
-
UNIQUE関数が使えないバージョ...
-
Excelで、項目の種類ごとにカウ...
-
【マクロ】アクティブセルにブ...
-
【マクロ】アクティブセルの行...
-
A列とB列を参照してC列に連番を...
-
【マクロ】アクティブセルの、...
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
エクセル日付 文字列の関数がエ...
-
エクセルの空欄をつめて、次の...
-
エクセルの問題です。絶対値の...
-
エクセルのコメントのデザイン...
-
エクセルで上位バイトのセルと...
-
Excel 大小比較演算子による「...
-
「問題が発生しました」ですと?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ネット検索1,3位にきてるど...
-
住所を途中まで入れると、Googl...
-
Cokkieを削除するコマンド(IE)...
-
検索ヒットをなくす。
-
inauthor 何でしょうか?
-
インスタの完全削除って削除依...
-
検索すると表示される個人名を...
-
自分の個人情報がgoogle検索で...
-
個人情報の削除代行業者
-
削除したい質問があり、お問い...
-
前の質問の続きですが。 インタ...
-
Twitterで垢消したら、投稿した...
-
ExcelVBA:複数の文字列を検索...
-
教えてGOOが開けないことがある
-
このサイトで学校の練習問題の...
-
教えて!goo QNo.3117663 ...
-
Googlechromeの機能について
-
自分の情報を検索エンジン(Goo...
-
iPhoneの設定のアイコンを誤っ...
-
マイページの出し方が分かりま...
おすすめ情報