特定の文字列が複数あって、その文字列があったときに行ごと削除を行いたくこちらのサイトで下記をみつけ、上手くいったのですが意味がわかりません。 解説をお願いします。
Sub Sample()
Dim i As Long, k As Long
Dim myRng As Range
Dim myary
myary = Array("赤", "青", "紫")
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
For k = 0 To UBound(myary)
If Cells(i, "A") = myary(k) Then
If myRng Is Nothing Then
Set myRng = Cells(i, "A")
Else
Set myRng = Union(myRng, Cells(i, "A"))
End If
Exit For
End If
Next k
Next i
If Not myRng Is Nothing Then
myRng.EntireRow. Delete
End If
End Sub
No.1ベストアンサー
- 回答日時:
こんばんは!
まず上記コードの
>myRng.EntireRow. Delete
を
>myRng.EntireRow.Select
に変更してみてください。
該当行が選択されているのが判ると思います。
さて、コードの説明ですが、
① 配列に「赤、青、紫」の順に格納しています。
配列のINDEX順は 0 1 2 ・・・
と最初は「1」ではなく、「0」から始まります。
なので
>For k = 0 To UBound(myary) (←今回は 0~2 までのループになります)
そして、A列データが配列に格納したデータを一致したセルを「myRng」に格納していく訳ですが、その際にUnionメソッドを使っています。
Unionメソッドですが、
何らかのRangeがセットされていないとエラーになりますので、まず
>If myRng Is Nothing Then
>Set myRng = Cells(i, "A")
のように最初にヒットしたセルを一旦セットし、次に
>Else
>Set myRng = Union(myRng, Cells(i, "A"))
でA列の該当セルをmyRngに次々セットしているコードです。
>If Not myRng Is Nothing Then
は単にエラー処理で該当セルが一つもない場合のエラーを回避しています。
尚
>myRng.EntireRow. Delete
を
>myRng.Select
に変更してみると該当するA列だけが選択されているのが判ると思います。
※ おそらく当方が投稿したコードのような気がしたので
以上のような説明を投稿してみました。m(_ _)m
そうです、こちらで見たコードを使用させていただき上手く行きました。ありがとうございます。
またわかりやすく解説して頂き助かりました。
No.3
- 回答日時:
こんにちは
お使いになっているコードは、
>『特定の文字を含むセル以外行ごと削除』
とは、かなりかけ離れた処理内容になっていると思いますが、はたしてそれで大丈夫なんでしょうか?
No.2
- 回答日時:
「特定の文字を含むセル以外を行ごと削除する」
「特定の文字列が・・・あったときに行ごと削除」
どっちが正解?
さて、本題です。
このコードのすべてが、全然、さっぱり、まるっきり、分かんないんですか?
それとも、大体は分かるけど、一部分が分からないのですか?
前者であれば、すいませんが、パスです。
後者であれば、どの辺の命令が分からないのか、補足してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBA 選択範囲とUnionの使い方について 8 2023/08/17 13:25
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
EXCEL VBA 文中の書式ごと複写...
-
excelで結合セルの場合にエラー...
-
【Excel VBA】一番右端セルまで...
-
エクセルのカーソルを非表示に...
-
Excel 範囲指定スクショについ...
-
Excel2003 VBA 「*」を含む文字...
-
セルの半透明着色処理
-
飛び地セルの空白判定
-
昨日、質問した件『VBA にて、...
-
Rangeの範囲指定限界
-
Excel VBA : セルのコメントの...
-
【VBA】【ユーザーフォーム_Lis...
-
関数の引数でrangeを指定したとき
-
Excel VBAでCheckboxの名前を変...
-
VBAでユーザーフォームにセル値...
-
特定の文字を含むセル以外行ご...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
エクセルVBA 配列からセルに「...
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
【Excel VBA】一番右端セルまで...
-
Excelで空白セル直前のセルデー...
-
【VBA】写真の貼り付けコードが...
-
VBAコードについて教えてくださ...
-
【VBA】【ユーザーフォーム_Lis...
-
Excel 範囲指定スクショについ...
-
VBAでユーザーフォームにセル値...
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
Excel VBAでCheckboxの名前を変...
-
複数指定セルの可視セルのみを...
-
Excel VBA IF文がうまく動作し...
-
エクセルのカーソルを非表示に...
-
入力規則のリスト選択
-
VBA 複数条件の分岐処理の上手...
おすすめ情報