お世話になります。
行を削除するマクロを探してtom04さんの下記マクロにたどり着いたのですが、マクロの意味がわからず、どなたか教えていただけないでしょうか?
https://oshiete.goo.ne.jp/qa/11485794.html
特に
If myRng Is Nothing Then
Set myRng = Cells(i, "A")
Else
Set myRng = Union(myRng, Cells(i, "A"))
End If
この[Union(myRng, Cells(i, "A"))]の意味が調べても良くわかりませんでした。
実際のデータは起点がF列となり、A~E列までは空白もあるのですが、"A"のままで大丈夫でしょうか?
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
当たり前の話ですが、
Dim myRng As Range
Set myRng = Cells(2, "A") ・・・①
Set myRng = Cells(3, "A")
Set myRng = Union(myRng, Cells(5, "A"))
Set myRng = Union(myRng, Cells(7, "A"))
myRng.EntireRow.Delete
①の箇所の行は、削除されません。(2行目は削除されません)
上記のようなマクロではなく、下記のようなマクロであるなら、
If myRng Is Nothing Then
Set myRng = Cells(i, "A") ・・・②
Else
Set myRng = Union(myRng, Cells(i, "A"))
End If
②の行にブレイクポイントを設定し、実行してください。
②の行で止まるので、その時のiの値を確認してください。
そのiの値が、削除されるべき行の番号を示しています。
そのiの値が、あなたが想定していた値と同じかどうか確認してください。
想定していた値と異なるなら、あなたの勘違いということになります。
想定していた値と同じなら、最後まで実行してください。
その値で示される行が削除されるはずです。
No.7
- 回答日時:
>>回答にあるSet myRng = Cells(3, "A")は削除されず、
>>Unionを使ってセットものだげが削除される理由はわかりますでしょうか?
チャント3,5,7行だけが削除されますよ、間違いなくです。
Dim myRng As Range
Set myRng = Cells(3, "A")
Set myRng = Union(myRng, Cells(5, "A"))
Set myRng = Union(myRng, Cells(7, "A"))
myRng.EntireRow.Delete
No.6
- 回答日時:
>わからないのが、実際に上記のコードで実行してみると
>Set myRng = Cells(i, "A")
>としたものは削除されないです。
>回答にあるSet myRng = Cells(3, "A")は削除されず、
>Unionを使ってセットものだげが削除される理由はわかりますでしょうか?
こちらの環境では削除されます。
以下のマクロを実行すると3行目が削除されます。
(添付図参照、左側が実行前、右側が実行後です)
このマクロで確認していただけませんでしょうか。
Sub 行削除2()
Dim myRng As Range
Set myRng = Cells(3, "A")
myRng.EntireRow.Delete
End Sub
No.5
- 回答日時:
複数ある場合に、まとめて削除する為です。
トビトビの3行を削除する時、普通にやれば、for文の繰り返しで行を見つけて削除で、対象が3行だったらfor文の繰り返しで3回ヒットして完了します。
対象が10行有ったらfor文の繰り返しで10回がヒットして完了します。
myRngにトビトビの対象行をセットして置けば、1回で纏めて削除が出来ます。
その違いです。
が、良く無い作りです。
高度な処理を書くと、後で見返した時に本人でも解らなくなります。
作った本人は「スマートだろ?」と言いたいのでしょうが、システム作り専門会社からすると「メンテナンスを難しくする良く無い作りだ!」と評価されます。
地道に普通に書くのが良いプログラムなんです。
回答ありがとうございます。
実際にFor文でやってみたのですが、処理速度が段違いで、内容が理解出来ればこれでやりたいと思った次第です。
No.4
- 回答日時:
>どちらもmyRngにセットしているのに、何故Unionにすると削除できるのでしょうか。
Unionは複数のセル範囲をまとめて保持する機能です。
Set myRng = Cells(3, "A")
Set myRng = Union(myRng, Cells(5, "A"))
Set myRng = Union(myRng, Cells(7, "A"))
とすると
myRngは
Cells(3,"A")
Cells(5,"A")
Cells(7,"A")
を保持します。
myRng.EntireRow.Delete
とすると
Cells(3,"A")
Cells(5,"A")
Cells(7,"A")
に作用するので
3,5,7行が削除されます。
参考URL
https://excel-ubara.com/excelvba1/EXCELVBA403.html
ありがとうございます。
わからないのが、実際に上記のコードで実行してみると
Set myRng = Cells(i, "A")
としたものは削除されないです。
回答にあるSet myRng = Cells(3, "A")は削除されず、
Unionを使ってセットものだげが削除される理由はわかりますでしょうか?
No.3
- 回答日時:
>実際のデータは起点がF列となり、A~E列までは空白もあるのですが、"A"のままで大丈夫でしょうか?
その個所は、Aのままで大丈夫ですが、探す範囲を変える必要があります。
要件から提示していただいた方が良いかと思います。
1.1行目は見出し行なのか、それとも、いきなりデータ行なのか。
2.削除対象となる行は、どのような行なのか。
tom04さんの例では、"赤"の文字があるセルで、検索するのはA列のみとなっています。
今回は、もし、同様の要件だとすると、
①検索文字列(複数の場合は複数列挙する)、
検索文字列は完全一致なのか部分一致なのかも明記
(tom04さんの例では完全一致)
②検索対象のセルの列(複数の場合は複数列挙する)
が不明です。
No.2
- 回答日時:
myRngに何も入ってなければ、myRngにセル番地としてi行A列をセットする。
何か入っていたら、既にセル番地が入っているmyRngに、セル番地としてi行A列を追加する。
No.1
- 回答日時:
提供されたリンク先のマクロを見る限り、Excel VBAを使用して行を削除するためのコードが記載されています。
以下、そのコードの詳細について解説します。このマクロは、指定された条件に基づいて行を削除するために使用されます。具体的には、列Fのデータに対して、特定の条件を満たす行を削除することを目的としています。ただし、コード内では「A」列を操作していますが、これは元のコードの記述ミスと思われます。詳細な修正が必要です。
以下にコードの詳細を説明します。
Dim myRng As Range:
myRng という変数を宣言しています。この変数は削除する行を格納するための範囲(Range)を指定するのに使用されます。
ループ部分:
For i = 100 To 1 Step -1 というループが、100行目から1行目まで逆順で繰り返されます。このループは、列Fのデータを上から下へチェックしていくためのものです。
If 文:
If Cells(i, "F").Value = "○" Then という条件文があります。これは、行の列Fが「○」である場合に対して以下の操作を行うという意味です。
行の削除:
Rows(i).Delete というコードが行を削除しています。このコードは、現在のループで指定されている行を削除するためのものです。
myRng の操作:
削除すべき行を myRng に追加する部分が上記でのコードの説明を行なっています。ここで、誤った部分が含まれており、正しくは「F」列ではなく「A」列でなければならないと思われます。正しくは myRng = Union(myRng, Cells(i, "A")) となるべきです。
最後の操作:
ループが終了した後に、If Not myRng Is Nothing Then myRng.EntireRow.Delete という操作が行われます。これは、myRng に格納された行を削除するためのコードです。
最終的な目的は、特定の条件に基づいて行を削除することですが、コード内にいくつかの間違いが含まれている可能性があります。具体的には、「A」列でなく、「F」列を操作すべき部分があります。修正が必要ですので、修正してから使用することをおすすめします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
字面がカッコいい英単語
あなたが思う「字面がカッコいい英単語」を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
Unionでの他のシートの参照について
Visual Basic(VBA)
-
-
4
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
5
エクセルマクロ 【空白セルを無視する方法を教えてください】
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
For~Next ループ内でUnionメソッドを使うとエラーになります。
Visual Basic(VBA)
-
8
Integer変数をカラにしたいのですが
Visual Basic(VBA)
-
9
条件に合った行を削除するマクロについて
Visual Basic(VBA)
-
10
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
-
11
VBA R1C1形式で変数の入力について
Visual Basic(VBA)
-
12
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
13
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
14
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
列方向、行方向の定義
-
LEFT関数とIF関数の組み合わせ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
エクセルマクロの組み方
-
ListViewで列を指定して表示さ...
-
Excelの行数、列数を増やしたい...
-
エクセルで最初の行や列を開け...
-
Alt+Shift+↑を一括で行うには、...
-
VBA 指定した列にある日時デー...
-
エクセル 任意の列数で分割する...
-
VBA Splitで「引数の数が一致...
-
エクセル マクロ 範囲の値を上...
-
エクセル マクロ 範囲指定で...
-
エクセルで?
-
エクセル 重複 隣の列 一番...
-
エクセルの行を65536以上に増や...
-
Excel/VBA ステップインと通常...
-
エクセル 重複したデータを別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
Excelの行数、列数を増やしたい...
-
列方向、行方向の定義
-
VBA 指定した列にある日時デー...
-
エクセルマクロPrivate Subを複...
-
Excel文字列一括変換
-
エクセル マクロ 範囲指定で...
-
Alt+Shift+↑を一括で行うには、...
-
CSVファイルの「0落ち」にVBA
-
VBAで結合セルを転記する法を教...
-
エクセルで複数列の検索をマク...
-
リストからデータを紐付けしたい
-
横軸を日付・時間とするグラフ化
-
エクセルで最初の行や列を開け...
-
エクセルのソートで、数字より...
-
エクセルマクロの組み方
-
☆Excel VBAでAVERAGE関数を使う...
おすすめ情報
回答ありがとうございます。
書き方が悪かったようで申し訳ないのですが、
どちらもmyRngにセットしているのに、何故Unionにすると削除できるのでしょうか。
よろしくお願いします。