こんにちは。
vbaで、いくつかセルを格納したrange変数の中から特定のセルだけ削除する方法はありますでしょうか。
あるrange変数の中に特定のセルを入れる場合は
unionメソッドでできるのですが、その逆はどのようにすれば良いか困っています。
foeach文でrange変数を回して、特定のセル以外を別のrange変数に入れ直す方法は思いついたのですが、それ以外で何か方法はありますでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
どのような目的でそのようなことをしたいのか分かりませんが、
TanakaHiroakiさんの回答のようなことがしたいのなら、
発想を変えて、
- 除外したいセルの背景色を変数に保存しておいて、
- range全体に背景色を設定して、
- 除外したいセルの背景色を変数を使用してもとに戻す
というようにした方がシンプルだし高速だと思います。
vba
1Sub fugafuga() 2 Dim r1 As Range, r2 As Range 3 Dim cId As Integer 4 5 Set r1 = Range("A1:C3") 6 Set r2 = Range("B2:B3") 7 cId = r2.Interior.ColorIndex 8 9 r1.Interior.ColorIndex = 6 10 r2.Interior.ColorIndex = cId 11End Sub
投稿2019/05/27 20:12
総合スコア34352
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
質問者の以下を見落としておりました。すみません。
foeach文でrange変数を回して、特定のセル以外を別のrange変数に入れ直す方法は思いついたのですが、それ以外で何か方法はありますでしょうか。
かなり遠回りですが、Intersect関数とUnion関数を
使った抽出方法を考えてみました。
例えば、Range("A1:C3")とRange("B2:B3")が重ならない
範囲の抽出は以下のようになります。
VBA
1Sub hogehoge() 2 Dim r1 As Range, r2 As Range 3 For Each r1 In Range("A1:C3") 4 If Intersect(r1, Range("B2:B3")) Is Nothing Then 5 If r2 Is Nothing Then 6 Set r2 = r1 7 Else 8 Set r2 = Union(r2, r1) 9 End If 10 End If 11 Next r1 12 r2.Interior.ColorIndex = 6 '結果をアウトプット 13End Sub
投稿2019/05/27 11:18
編集2019/05/27 11:21総合スコア1065
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/27 10:48
2019/05/27 10:51
2019/05/27 12:53 編集