アプリ版:「スタンプのみでお礼する」機能のリリースについて

Sub あああ()

Dim a As Variant

a = Range("H11")

Select Case True

Case (a < Range("G11") And a < Range("G11")And a < Range("I11")And a < Range("H10"))

Range("H11").Font.Color = RGB(255, 255, 255)
Range("H11").Interior.Color = RGB(255, 0, 0)

End Select

End Sub

前回の質問でここまでは理解できたのですが、

Range("G11") Range("G11") Range("I11") Range("H10")のすべての値が
Range("H11")より大きいとき Range("H11")セルを赤く塗りつぶし、文字を白くする

下記の条件を記載したいのです。Select Case の範疇ではないのかもしれませんが、

Range("G11") Range("G11") Range("I11") Range("H10")の4つのうち、どれか一つがRange("H11")の値より小さいときは、Range("H11")セルを青くく塗りつぶし、文字を白くする

Range("G11") Range("G11") Range("I11") Range("H10")の4つのうち、どれか二つがRange("H11")の値より小さいときは、Range("H11")セルを黄色く塗りつぶし、文字を白くする

Range("G11") Range("G11") Range("I11") Range("H10")の4つのうち、どれか三つがRange("H11")の値より小さいときは、Range("H11")セルを黒く塗りつぶし、文字を白くする

select caseでできなければ、If条件分岐するのでしょうか?
また、あまり理解できていないののですが、判定するセルは規則性があるので、
変数などを組み合わるとできるのでしょうか?

ご教示お願いします

A 回答 (6件)

こんばんは!


横からお邪魔します。

Select Case でやる場合の一例です。

Sub Sample1()
Dim c As Range, myRng As Range, myCnt As Long
With Range("H10")
Set myRng = Union(.Offset(, -1), .Offset(-1), .Offset(, 1))
For Each c In myRng
If c < .Value Then
myCnt = myCnt + 1
End If
Next c
Select Case myCnt
Case 3
.Interior.ColorIndex = 1 '←「黒]
.Font.ColorIndex = 2 '←「白」
Case 2
.Interior.ColorIndex = 6 '←「黄」
.Font.ColorIndex = 3 '←「赤」
Case 1
.Interior.ColorIndex = 5 '←「青」
.Font.ColorIndex = 2
Case Else
.Interior.ColorIndex = xlNone
.Font.ColorIndex = xlAutomatic
End Select
End With
End Sub

※ 「黄色の塗りつぶし」「白文字」は見えにくいので「赤文字」にしています。
こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

一番私が求めているのに近い回答でしたのです。ありがとうございます。
ついでになんですが、私にはこのコードがだ理解できていないのですが、
With Range("H11")が回りのセルの(H10、H12,G11,I11)の全部の値よりも小さいときは、 Case4の条件をどのうに記載するのでしょうか?

With Range("H11")は、cellsを利用して、H11のH12、H13というように cells(11、i)というように記載できるのしょうか?

とりあえず、今からやってみます。

お礼日時:2016/05/03 09:38

比較対象のセルにG11が2回登場しているのが、これって間違いですよね?とりあえず、無視して回答します。


Excelらしく、CountIfワークシート関数で、条件にあう件数をカウントしてみました。

Sub sample()
Select Case WorksheetFunction.CountIf(Range("G11:G11:I11:H10"), "<" & Range("H11"))
Case 1
'1つの場合の処理
Case 2
'2つの場合の処理
Case 3
'・
'・
End Select
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
できました。

お礼日時:2016/05/03 09:18

No.4です。



投稿後気づきました。
前回のコードは1行ずれていましたので
>With Range("H10")

>With Range("H11")
に変更してください。

どうも失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

Sub Sample1()
Dim c As Range, myRng As Range, myCnt As Long
With Range("H11")
Set myRng = Union(.Offset(, -1), .Offset(-1), .Offset(, 1), .Offset(1))
For Each c In myRng
If c < .Value Then
myCnt = myCnt + 1
End If
Next c
Select Case myCnt

case4
.Interior.ColorIndex = 3 '←「黒]
.Font.ColorIndex = 2 '←「白」
Case 3
.Interior.ColorIndex = 1 '←「黒]
.Font.ColorIndex = 2 '←「白」
Case 2
.Interior.ColorIndex = 6 '←「黄」
.Font.ColorIndex = 3 '←「赤」
Case 1
.Interior.ColorIndex = 5 '←「青」
.Font.ColorIndex = 2
Case Else
.Interior.ColorIndex = xlNone
.Font.ColorIndex = xlAutomatic
End Select
End With
End Sub

と変更したのですが、作動しません。
select case と最初のcaseの間のステートメントが適切ではありませんとなります

お礼日時:2016/05/03 09:50

a < Range("G11").Value)


の条件 True の 場合 1 False の場合 0
ですの、
それぞれの条件の足し算で
4つの条件がそろった場合
Select Case b
Case 4

三つの条件がそろった場合
Case 3
ここに、三つの場合に 塗りつぶしの色

二つの条件がそろった場合
Case 2
ここに、二つの場合に 塗りつぶしの色

一つの条件しかない場合
Case 1
ここに、一つの場合に 塗りつぶしの色

となります。
    • good
    • 0
この回答へのお礼

何度もありがとうございました。
私の知識がたりないのに、何度もありがとうございまいした。

お礼日時:2016/05/03 09:19

No1です。


http://www.peko-step.com/tool/tfcolor.html
こちらのサイトで、ご希望の色のRGBが得られると思います。
ちなみに黒は
Range("H11").Interior.Color = RGB(0, 0, 0)
    • good
    • 0
この回答へのお礼

もうしわけありません。色ではなく条件式です。
何度も申し訳ありません。

お礼日時:2016/05/02 18:55

一案です。


Sub ボタン1_Click()
a = Range("H11").Value
b = (a < Range("G11").Value) + (a < Range("H12").Value) + (a < Range("I12").Value) + (a < Range("H10").Value)
Select Case b
Case 4
Range("H11").Font.Color = RGB(255, 255, 255)
Range("H11").Interior.Color = RGB(255, 0, 0)
Case 3


Case 2


Case 1


Case Else

End Select

End Sub
こんな感じでは如何でしょうか。
    • good
    • 0
この回答へのお礼

もうしわけありません。私の質問に言葉が足りませんでした。

>Range("G11") Range("G11") Range("I11") Range("H10")の4つ>のうち、どれか一つがRange("H11")の値より小さいときは、Range("H1>1")セルを青くく塗りつぶし、文字を白くする

>Range("G11") Range("G11") Range("I11") Range("H10")の4つ>のうち、どれか二つがRange("H11")の値より小さいときは、Range("H1>1")セルを黄色く塗りつぶし、文字を白くする

>Range("G11") Range("G11") Range("I11") Range("H10")の4つ>のうち、どれか三つがRange("H11")の値より小さいときは、Range("H1>1")セルを黒く塗りつぶし、文字を白くする

この部分のコードではないですよね?

お礼日時:2016/05/02 18:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!