2017-02-20 9 views
0

私は3つのボタンと小さいスプレッドシートを持つフォームを作成しています。各ボタンは、受け入れ可能な結果の異なる範囲に対応する予定です。最初のボタンを押すと、38から44.4の間にシートの緑色の結果が強調表示され、その範囲から赤色の結果が強調表示されます。 2番目のボタンでは、良い範囲を33〜39.4に、3番目のボタンを33〜39.4(同じ許容結果範囲、異なる種類のテスト)にしたいと思います。基本的には、各ボタンで制定される条件付き書式が異なります。私は現在使用しています:値に基づいて色を変更する

Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Target.Range("C16") > 44.4 Then Target.Interior.Color = vbRed 
If Target.Range("C16") < 38 Then Target.Interior.Color = vbRed 
If Target.Range("C16") >= 38 And Target <= 44.4 Then Target.Interior.Color = vbGreen 


End Sub 

私は選択変更のプロパティに慣れていないとにかく、これは動作しません。ここからどこに行くのかわからない。どんな助けもありがとう。ありがとう!ボタンで

+0

*のSelectionChange *、それは*プロパティ*ですされていない 'Worksheet' **イベント**。 'Worksheet_SelectionChange' *は、イベントが発生/起動されたときにそのイベントを処理します。*イベントハンドラ*プロシージャです。サイドノート、イベントハンドラは 'Private'、暗黙的に' Public'です。 –

+0

@ Mat'sMug - Worksheet_SelectionChangeがパブリックモジュールコードシートではなくプライベートワークシートコードシートにあり、それがトリガーされる唯一の場所である場合、それは暗黙的にプライベートです。 – Jeeped

+0

@Jeeped [まあ、オブジェクトブラウザには見えません](https://i.stack.imgur.com/CrlPy.png)。 –

答えて

-1

入れ:

Sub Button1() 

    Dim myRange, cell As Range 
    Set myRange = Range("C16:G16") 

    For Each cell In myRange 
     If cell.Value > 44.4 Then 
      cell.Interior.Color = vbRed 
     ElseIf cell.Value < 38 Then 
      cell.Interior.Color = vbRed 
     ElseIf cell.Value >= 38 And cell.Value <= 44.4 Then 
      cell.Interior.Color = vbGreen 
     End If 
    Next 
End Sub 
+0

それは素晴らしいですが、範囲を「C16:G16」に変更すると実行時エラーが発生します。ある範囲の細胞に対して異なる構文がありますか?なぜ範囲がうまくいかないのか、考えてみてください。最悪の場合最悪になるこのコードを各セルに5回コピー/ペーストすることができます... – ladymrt

+0

"myRange = Range(" YourRange ")で範囲を指定する必要があります。最新の記事を参照してください。 –

+1

'Select Case'または' ElseIf'を使って、既に1つの基準を満たしている値を比較しないようにしてください。 – Jeeped

4

44.4は38以上である、そしてそれのためのチェックが38であるの任意の値以上の意味に関係なく、他の条件の結果の実行されています緑色になる。

条件を具体的に指定する必要があります。具体的には、「XとYの間」の部分です。これはSelect Caseブロックのための仕事のように見えます - 例えば、これはコード「38と44.4の間で緑」のようになります。

Select Case ActiveSheet.Cells("C16").Value 
    Case 38 To 44.4 
     Target.Interior.Color = vbGreen 
    Case Else 
     Target.Interior.Color = vbRed 
End Select 

コード「33と39.4の間に緑が」次のようになります。

Select Case ActiveSheet.Cells("C16").Value 
    Case 33 To 39.4 
     Target.Interior.Color = vbGreen 
    Case Else 
     Target.Interior.Color = vbRed 
End Select 

パターンに注意してください。それをパラメータ化し、独自の手順でそれを置く:

Public Sub ConditionalHighlight(ByVal checkCell As Range, ByVal target As Range, ByVal lowerLimit As Double, ByVal upperLimit As Double) 
    'ensure the value is a Double (and not an error or a string): 
    If VarType(checkCell.Value) <> vbDouble Then Exit Sub 

    'work with an actual Double instead of the Variant we get off the cell: 
    Dim checkValue As Double 
    checkValue = CDbl(checkCell.Value) 

    Select Case checkValue 
     Case lowerLimit To upperLimit 
      target.Interior.Color = vbGreen 
     Case Else 
      target.Interior.Color = vbRed 
    End Select 

End Sub 

今ちょうどあなたのボタンのClickハンドラからそれを呼び出す:

Private Sub Button1_Click() 
    ConditionalHighlight Range("C16"), Range("whatever"), 38, 44.4 
End Sub 

Private Sub Button2_Click() 
    ConditionalHighlight Range("C16"), Range("whatever"), 33, 39.4 
End Sub 

Private Sub Button3_Click() 
    ConditionalHighlight Range("C16"), Range("whatever"), 42, 74.4 
End Sub 
+0

@Jeepedありがとう、固定。とにかくそれは混乱している 'ケースイズ'の構文が嫌いです:) –

関連する問題