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

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

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

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

Q&A

解決済

1回答

1477閲覧

離れた選択セルに色が塗られているかを判定する方法

koridentetsu

総合スコア27

VBA

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

0グッド

0クリップ

投稿2020/04/10 00:54

「選択範囲内に、塗りつぶしの色がついているセルはいくつあるか」を判定したくて、次のようなコードを書きました。

vba

1Sub SelectionIroCount() 2 Dim 選択数 As Long, i As Long, c As Long 3 選択数 = Selection.Count 4 For i = 1 To 選択数 5 If Not Selection(i).Interior.ColorIndex = xlNone Then c = c + 1 6 Next 7 MsgBox "全体" & 選択数 & vbLf & "色なし" & 選択数 - c & vbLf & "色つき" & c 8End Sub

上記のコードは、選択範囲が1つの長方形なら意図通りに動作しますが、離れた(飛び飛びの)複数個所を選択しているときに意図通りに動作しません。

例えば、「B2:G3」の範囲が黄色に塗りつぶされているとします。
この状態で、「B2:E6」と「G1:G3」という「離れた複数個所」を同時に選択している場合、
「全体19 色なし11 色つき8」という結果になってしまいます。
実際にはこの、選択範囲内には、塗りつぶされているセルは10個あるので、
意図通りに動作しているなら、「全体19 色なし9 色つき10」となるはずです。
どうすれば、「離れた複数個所」を同時に選択している場合でも、正しく塗りつぶしのあるセルをカウントできるようになるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

これならできましたが、Selectionを添え字参照するとダメな理由までは時間がなくて調べておりません。

VBA

1Sub SelectionIroCount() 2 Dim 選択数 As Long, c As Long 3 Dim r As Range 4 選択数 = Selection.Count 5 For Each r In Selection 6 If Not r.Interior.ColorIndex = xlNone Then c = c + 1 7 Next 8 MsgBox "全体" & 選択数 & vbLf & "色なし" & 選択数 - c & vbLf & "色つき" & c 9End Sub

投稿2020/04/10 01:10

ttyp03

総合スコア16998

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

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

koridentetsu

2020/04/10 07:59

ありがとうございます! 解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問