以下のマクロは、EXCEL2003で
「特定の文字列が含まれている列を削除する」動作をするマクロです
Sub Macro1()
Const col As String = "A" '文字列が入力されている列
Dim idx As Long
Dim keyWord
keyWord = Application.InputBox("削除対象の文字列は?", Type:=2)
If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then
For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1
If InStr(Cells(idx, col).Value, keyWord) > 0 Then
' If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then
Rows(idx).Delete
End If
Next idx
End If
End Sub
このマクロを、
「特定の文字列が含まれている行のみを残し、それ以外を削除する」
というマクロに変更したいと思っています。
是非ご回答お願いいたします。
No.1
- 回答日時:
>If InStr(Cells(idx, col).Value, keyWord) > 0 Then
の部分が条件の判定をしているところですので、これを逆にすれば、実行内容(削除する対象)も逆になります。
No.2ベストアンサー
- 回答日時:
こんにちは。
ご自身のコードではありませんね。ある程度、コードが書ける人のものです。間違いがありますが。
私としては、他人のコードはあまりいじらないようにしていますので、二番目に私のコードを出しておきます。
'-------------------------------------------
Sub Macro1R()
Const col As String = "A" '文字列が入力されている列
Dim idx As Long
Dim keyWord '←Variant にしていから、本来は、TypeName では受けない
keyWord = Application.InputBox("除外対象の文字列は?", Type:=2)
If TypeName(keyWord) <> "False" And Len(keyWord) > 0 Then
For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1
If InStr(Cells(idx, col).Value, keyWord) = 0 Then
If Application.CountIf(Rows(idx), "*" & keyWord & "*") = 0 Then
Rows(idx).Delete
End If
End If
Next idx
End If
End Sub
'-------------------------------------------
'-------------------------------------------
Sub MacroTest1()
Dim keyWord As Variant
Dim FirstAdd As String
Dim UR As Range
Dim c As Range
Const col As Long = 1 '列数
keyWord = Application.InputBox("除外対象の文字列は?", Type:=2)
If VarType(keyWord) = vbBoolean Or Len(keyWord) = 0 Then Exit Sub
With ActiveSheet
With .UsedRange
Set c = .Find( _
What:="*" & keyWord & "*", _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows)
If Not c Is Nothing Then
FirstAdd = c.Address
Set UR = c
Do
Set c = .FindNext(c)
Set UR = Union(UR, c)
If c.Address = FirstAdd Then Exit Do
Loop Until c Is Nothing
End If
End With
If Not UR Is Nothing Then
UR.EntireRow.Hidden = True
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
.UsedRange.EntireRow.Hidden = False
End If
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBA 行削除した連番 4 2023/06/27 16:00
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
-
4
VBAで特定の文字を含まない列の削除方法について
Excel(エクセル)
-
5
エクセルで指定した項目の列だけ残し、残りは削除したい
Windows Vista・XP
-
6
エクセルVBAで、ある指定した文字を含む行だけを選択したいのですが、、 例えば、1〜20行目までに"5274995"
Excel(エクセル)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
特定の文字列があったらその行をまるごと別シートに反映させたい
Excel(エクセル)
-
9
【VBA】条件に一致しない行を削除したい 複数条件
Visual Basic(VBA)
-
10
エクセルVBAで、ある文字を含んでいたら別シートに抽出したい
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
VBAで文字列を数値に変換したい
Excel(エクセル)
-
13
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
14
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
15
【Excel VBA】特定の列以外を削除
Excel(エクセル)
-
16
エクセルマクロにて最終行まで数式をコピーする構文
Excel(エクセル)
-
17
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
【Excel VBA】複数ある特定の文...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Excelで指数表現しないようにす...
-
VBの「As String * 128」とは?
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列をtxtファイル...
-
ORCLEでの小数の表示方法の変更...
-
Left関数とRight関数を合わせた...
-
Pro c/c++ でホスト変数の後に....
-
VBscriptからバッチに変数を渡...
-
Excelはなんで先頭の0を消すん...
-
16進数を10進数に簡単に変換す...
-
【COBOL】文字列から数値項目に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
[C言語]fputsとfprintfの違い
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
Excelはなんで先頭の0を消すん...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
sedなどで、特定の文字列の後の...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
おすすめ情報