Excel VBA質問箱 IV

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

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


31956 / 76734 ←次へ | 前へ→

【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

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

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

ケースバイケースです。

試してみてください。

3 hits

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

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