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

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

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

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

マクロ

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

受付中

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

zuzu1984
zuzu1984

総合スコア31

VBA

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

マクロ

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

3回答

0グッド

0クリップ

100367閲覧

投稿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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2018/07/03 23:39

こちらの質問が他のユーザーから「過去の低評価」という指摘を受けました。

sazi

2018/07/04 03:33

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

回答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

総合スコア2132

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

総合スコア323

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

総合スコア16988

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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

マクロ

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