Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5585 / 13645 ツリー ←次へ | 前へ→

【50018】複数条件を1個のマクロに統合させたいのですが 美紀子 07/7/3(火) 20:47 質問[未読]
【50019】Re:複数条件を1個のマクロに統合させたい... ichinose 07/7/4(水) 6:56 発言[未読]

【50018】複数条件を1個のマクロに統合させたいの...
質問  美紀子  - 07/7/3(火) 20:47 -

引用なし
パスワード
   こんばんは。
点数の結果条件として素人ながら

Sub 判定1()

  Dim gyou As Integer
  
  For gyou = 6 To 6
    If Cells(gyou, "c") >= 85 Then
      With Range("d11").Interior
        .ColorIndex = 33
        .Pattern = xlSolid
      End With
    End If
  Next gyou
  
End Sub

Sub 判定2()

  Dim lngkekka As Long
  lngkekka = Range("c6") - Range("d6")
  Range("e50") = lngkekka
  
  Dim gyou As Integer
  
  For gyou = 50 To 50
    If Range("e50") >= 11 Then
      With Range("e11").Interior
      .ColorIndex = 33
      .Pattern = xlSolid
    End With
    End If
  Next gyou
  
End Sub

Sub 判定3()

  Dim lngkekka As Long
  lngkekka = Range("d6") - Range("e6")
  Range("f50") = lngkekka
  
  Dim gyou As Integer
  
  For gyou = 50 To 50
    If Range("f50") >= 6 And Range("f50") <= 10 Then
      With Range("f11").Interior
      .ColorIndex = 33
      .Pattern = xlSolid
    End With
    End If
  Next gyou
  
End Sub

と3つに分けて条件結果を作っています。
そこで質問なのですが

1.・・・3つの条件をすべて満たせば「D11」に青、
    1つでも満たさなければ「D11」に赤を表示させるには
    どのようにすれば可能なのでしょうか?
    今は1つ1つのマクロ実行で行っていますが
    1度の実行で表示させたいと考えています。

2.・・・1.に加えて現在は
    判定2のc6−d6の結果をe50に
    判定3のd6−e6の結果をf50に
    1度表示させてますが、最終的には表示させずに
    1.の様に実行させたいと考えています。

初めての作業でなんとかココまでは出来たのですが
ココから先がわからなかったのでお手伝いいただければと思います。
よろしくお願いします。

【50019】Re:複数条件を1個のマクロに統合させた...
発言  ichinose  - 07/7/4(水) 6:56 -

引用なし
パスワード
   ▼美紀子 さん:
おはようございます。

>点数の結果条件として素人ながら
>
>Sub 判定1()
>
>  Dim gyou As Integer
>  
>  For gyou = 6 To 6
'このForステートメント要りませんよね? 
'何か理由があってのことですか?
>    If Cells(gyou, "c") >= 85 Then
'    Cells(gyou, "c").value とプロパティまで記述する癖を
'    付けてください。その方が思わぬバグに遭遇することが少ないですよ!!
>      With Range("d11").Interior
>        .ColorIndex = 33
>        .Pattern = xlSolid
>      End With
>    End If
>  Next gyou
>End Sub

一つのコードで全て判断するには

Sub 判定()
  Dim wk As Double
  Dim Result As Boolean
  Result = True
' ↑True 3つの条件の全てが成立 
'  False 3つの条件の少なくとも一つが不成立

  With Range("d11:f11").Interior
    .ColorIndex = xlNone
    End With
'一度、塗りつぶしをクリア

  If Cells(6, "c").Value >= 85 Then
    With Range("d11").Interior
     .ColorIndex = 33
     .Pattern = xlSolid
     End With
  Else
    Result = False
    End If
  wk = Range("c6").Value - Range("d6").Value
  If wk >= 11 Then
    With Range("e11").Interior
     .ColorIndex = 33
     .Pattern = xlSolid
     End With
  Else
    Result = False
    End If
  wk = Range("d6").Value - Range("e6").Value
  If wk >= 6 And wk <= 10 Then
    With Range("f11").Interior
     .ColorIndex = 33
     .Pattern = xlSolid
     End With
  Else
    Result = False
    End If
  If Result = False Then
    With Range("d11").Interior
     .ColorIndex = 3
     .Pattern = xlSolid
     End With
    End If
End Sub


なんてコードで可能です。

コードを短くするなら、

Sub 判定0()
  Dim g0 As Long
  Dim Result As Boolean
  Dim chk As Variant
  With Range("d11:f11").Interior
    .ColorIndex = xlNone
    End With
  chk = Array("c6>=85", "c6-d6>11", "AND(d6-e6>=6,d6-e6<=10)")
  Result = True
  For g0 = LBound(chk) To UBound(chk)
    If Evaluate(chk(g0)) Then
     With Range("d11").Offset(0, g0).Interior
       .ColorIndex = 33
       .Pattern = xlSolid
       End With
    Else
     Result = False
     End If
    Next
  If Result = False Then
    With Range("d11").Interior
     .ColorIndex = 3
     .Pattern = xlSolid
     End With
    End If
End Sub

なんてコードでも可能です。

コードが短いから良いという事ではありませんよ!!

ケースバイケースです。

試してみてください。

5585 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free