2017-05-22 12 views
1

私は現在Excel 2010を使用していますが、アプリケーション用にVBAに組み込んだコードを実行しようとしています(alt + F11を押した後)。私が作業したいプロジェクトをダブルクリックした後に表示されるメモ帳にコードを入力しました。 Excel Macro Enabled Workbook(* .xlsm)としてすべて保存しました。Excel 2010 VBAコードが実行されていません

S、T、およびUの列が基準を満たしている場合、列Dの背景を緑色または赤色に色付けしようとしています。列の値がすべて0の場合、セルDは緑色になります。そうでない場合は、赤色に着色してください。

Sub GreenOrRed() 
    Dim i As Integer 
    For i = 2 To i = 27293 
    If (Cells(i, "S").Value = 0 And Cells(i, "T").Value = 0 And Cells(i, "U").Value = 0) Then 
     Cells(i, "D").Interior.ColorIndex = 10 
    Else 
     Cells(i, "D").Interior.ColorIndex = 9 
    End If 
    Next i 
End Sub 

コードは実行され、エラーは発生しませんが、何も行われません。私は間違って何をしていますか?

+0

なぜ、** For **ループが有効だが何もしなかった理由を理解できるように...あなたのステートメントは効果的に 'For i = 2 To(i = 27293)'です。ループの初期化において、「i」は0であるので、「i = 27293」は「False」に等しい。 'False'は' Integer'に強制されると0になるので、あなたの文は 'For i = 2 To 0'になります。 2はすでに0より大きいので、コントロールは直ちに 'Next i 'の後のステートメントにジャンプします。 – YowE3K

+0

ねえ皆さん、ありがとうございます。私の問題は、すべてのセルの前に「ワークシート(シート)。セル」を置いていないということでした。私がそれをした後、私は私のものを働かせることができました。私はまた、関数をForループからWhileループに変更しました。 – fantomknight1

答えて

2

Forループでcounterを間違って使用しています。これはこのようなはずです...

For i = 2 To 27293 
1

変更されたFor conditionです。 これを試してください: -

Sub GreenOrRed() 
    Dim i As Integer 
    For i = 2 To 27293 
    If (Cells(i, "S").Value = 0 And Cells(i, "T").Value = 0 And Cells(i, "U").Value = 0) Then 
     Cells(i, "D").Interior.ColorIndex = 10 
    Else 
     Cells(i, "D").Interior.ColorIndex = 9 
    End If 
    Next i 
End Sub 
1

A、わずかに異なるアプローチを:

Sub GreenOrRed() 
    Dim r As Range, rr As Range 
    Set rr = Range("D1:D27293") 

    For Each r In rr 
     If r.Offset(0, 15).Value = 0 And r.Offset(0, 16).Value = 0 And r.Offset(0, 17).Value = 0 Then 
      r.Interior.ColorIndex = 10 
     Else 
      r.Interior.ColorIndex = 9 
     End If 
    Next r 
End Sub 
0

あなたが1つ(または2)条件付き書式ルールを設定することを検討することがあります。

私は個々のSUM関数を使用して、テキストがゼロの数値を返すようにしました。

代替オートフィルタ方式。

Sub GreenOrRedFiltered() 
    With ActiveSheet 
     If .AutoFilterMode Then .AutoFilterMode = False 
     With .Range(.Cells(1, "D"), .Cells(.Rows.Count, "D").End(xlUp)).Resize(, 18) 
      .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0).Columns(1).Interior.ColorIndex = 9 
      .AutoFilter Field:=16, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString 
      .AutoFilter Field:=17, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString 
      .AutoFilter Field:=18, Criteria1:=0, Operator:=xlOr, Criteria2:=vbNullString 
      With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) 
       If CBool(Application.Subtotal(103, .Cells)) Then 
        .Columns(1).SpecialCells(xlCellTypeVisible).Interior.ColorIndex = 10 
       End If 
      End With 
     End With 
     If .AutoFilterMode Then .AutoFilterMode = False 
    End With 
End Sub 
関連する問題