質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1325閲覧

vbaでrange変数の中に入れたセルを一つ削除したい

Tetsuya3456

総合スコア22

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

1クリップ

投稿2019/05/27 05:06

こんにちは。
vbaで、いくつかセルを格納したrange変数の中から特定のセルだけ削除する方法はありますでしょうか。

あるrange変数の中に特定のセルを入れる場合は
unionメソッドでできるのですが、その逆はどのようにすれば良いか困っています。

foeach文でrange変数を回して、特定のセル以外を別のrange変数に入れ直す方法は思いついたのですが、それ以外で何か方法はありますでしょうか。

Y.H.👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ご存知のように今までのExcelでは、シートで範囲選択中に選択済みのセルを取り消すことはできませんでした。
それと同じで取り消す機能のメソッドは用意されていないものと思われます。

しかしExcel2019から待望の取り消す機能が搭載されました。
選択を解除する
従って新しいメソッドが追加されたのではないかと調べてみましたが発見することはできませんでした。
手元にExcel2019がないので試すことが出来ないのですが、もしかしたらマクロの記録を使えば何かわかるかもしれません。
もちろんExcel2019でですが。。。

投稿2019/05/27 07:30

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2019/05/27 10:48

Excel2019で、マクロの記録を使って試してみました。 まず、A1 から C5 まで選択してから、Ctrlをおしながら B3 をクリックして選択を解除します。 ここで記録終了してできたマクロをみると、 Sub Macro1() ' ' Macro1 Macro ' ' Range("A4:C5,C3,A3,A1:C2").Select Range("A1").Activate End Sub 選択の解除はマクロでは無理なようです。
ttyp03

2019/05/27 10:51

実験ありがとうございます。 MSのマニュアルにもそれっぽいメソッドは掲載されていなかったので、やはりマクロでは無理っぽいですね。 何か隠された機能でも出てくるかと期待したんですけどね(^^;
Tetsuya3456

2019/05/27 12:53 編集

ご回答頂きありがとうございます。 また、試して頂きありがとうございますm(_ _)m 該当するメソッドはあっても良さそうですが、ないんですね、、。
guest

0

ベストアンサー

どのような目的でそのようなことをしたいのか分かりませんが、
TanakaHiroakiさんの回答のようなことがしたいのなら、
発想を変えて、

  1. 除外したいセルの背景色を変数に保存しておいて、
  2. range全体に背景色を設定して、
  3. 除外したいセルの背景色を変数を使用してもとに戻す

というようにした方がシンプルだし高速だと思います。

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

hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tetsuya3456

2019/07/02 02:00

返信が遅れて申し訳ありません。 こちらの回答で解決いたしました。ありがとうございました。
guest

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
TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tetsuya3456

2019/05/27 12:55

ご回答頂きありがとうございます。 こちらの方法で明日早速試して、処理スピード等どうか確認してみます!
TanakaHiroaki

2019/05/27 13:16 編集

Excelはアクティブシートが変わると、処理時間が変わる場合があるとの報告がありましたので、余裕があれば、当該シート以外をActivateにし、その場合に動作するコードで処理速度がどうなるのかも試してみてください。 (参考サイト) https://z1000s.hatenablog.com/entry/2019/05/04/231311
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問