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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

3回答

112794閲覧

VBAで特定の色がついたセルがある場合に処理をする。

zuzu1984

総合スコア31

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/07/03 14:05

VBAで書きたいです。

特定の範囲(出来れば図のような範囲、難しい場合はシート全体からでもOK)に
オレンジがあればB1セルに[A]、オレンジがない場合はB1セルに[B]と記載したい場合
どの様にコードを書いたらいいでしょうか。

こんな感じかな、と書いてみたのですが、見当違いなようで動きません。

どなたかアドバイスお願いします。

イメージ説明

VBA

1Sub Test() 2 3 Dim Flag 4 5 Select Case True 6 Case Range("I8:T17").Interior.ColorIndex = RGB(0、166、93)     '緑 7 Case Range("I8:T17").Interior.ColorIndex = RGB(237、28、36)   '赤 8 Case Range("I8:T17").Interior.ColorIndex = RGB(255, 255, 255)   '白   9 Case Else 10 Flag = False 11 End Select 12 13 If Flag = False Then 14 Range("B2") = "〇" 15 Else 16 Range("B2") = "×" 17 End If 18 19 20End Sub

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

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

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

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

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

sazi

2018/07/04 03:33

その色って条件付き書式で設定した色だったりしませんか?
guest

回答3

0

VBA

1Sub Macro2() 2 Dim c As Range 3 4 Application.FindFormat.Interior.Color = 49407 5 Set c = ActiveSheet.UsedRange.Find(What:="", SearchFormat:=True) 6 Range("B1").Value = IIf(c Is Nothing, "B", "A") 7End Sub

まず、
ColorIndexはカラーパレットの番号を示します。
直接色とは関係ありません。(何番のパレットには何色って決まってますが)
手動の場合は、パレットに乗ってる色を選択すると思いますが、
色で表すなら、Colorプロパティの値を参照してください。
それから、 RGB関数は結局整数の数値を返します。
なので、色は、マクロの記録をしてみて得られる数値を、
そのまま流用したほうがいいと思います。
微妙に数字がずれただけで判定が狂います。

次に、シート上の使っている範囲は
ActiveSheet.UsedRangeみたいに表現できます。
そして、
「もし、その中にオレンジに塗りつぶされたセルがあれば、」
というのは、検索機能で色がついたセルも検索できるので、
それで検索してHitすれば「有」と判定できると思うので、
Application.FindFormat.Interior.Color = 49407
Set c = ActiveSheet.UsedRange.Find(What:="", SearchFormat:=True)
と、検索すればいいと思います。
この辺は手動で動作を確認し、マクロの記録でどのようなコードで
書けばいいかを探ってみるといいと思います。
で、見つからなかったら変数の中身がNothingになったままなので、
その状態で、AとBを書き分けます。

投稿2018/07/04 00:50

mattuwan

総合スコア2136

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

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

0

やりたいのはこんな感じ?

VBA

1 Select Case ActiveSheet.Cells(1, 1).Interior.Color 2 Case RGB(0, 255, 0) 3 MsgBox "緑" 4 Case RGB(255, 0, 0) 5 MsgBox "赤" 6 Case RGB(255, 255, 255) 7 MsgBox "白" 8 Case Else 9 MsgBox "その他" 10 End Select 11

でも、Rangeで複数範囲選択にすると取れない気が。
あとColorIndexColorを比較してるのがマズイかと。

投稿2018/07/04 00:13

sysjojo

総合スコア325

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

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

0

試してませんが、おそらくこんな感じになるかと思います。
RGBの引数は判定したいオレンジの値に変更してください。

VBA

1Sub Test() 2 3 Dim Flag As Boolean 4 Dim r As Range 5 6 Flag = False 7 For Each r In Range("I8:T17") 8 If r.Interior.Color = RGB(0, 0, 0) Then 9 Flag = True 10 Exit For 11 End If 12 Next 13 14 If Flag = True Then 15 Range("B1") = "A" 16 Else 17 Range("B1") = "B" 18 End If 19 20End Sub 21

投稿2018/07/03 23:35

編集2018/07/04 01:34
ttyp03

総合スコア16998

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問