2017-11-14 1 views
0

私はコードを書いていますので、セルの値が0.10を超えると黄色に変わります。そうでなければ、それは白いままでなければならない。白く留まる代わりに、セルは黒くなります。私はなぜこれをやっているのか分かりません。Excel VBAはセルを黒に変え続けます

Sub moreThan10Percent() 
For nRow = 2 To 1937 
    For nColumn = 6 To 6 
     If Cells(nRow, nColumn) >= 0.1 Then 
      Cells(nRow, nColumn).Interior.ColorIndex = 6 
      Else 
      Cells(nRow, nColumn).Interior.Color = 1 
     End If 
    Next nColumn 
Next nRow 

End Subの

+2

細胞(nRow、nColumn)> = 0.1次に、細胞(nRow、nColumnは).Interior.ColorIndex = 6'また、あなたは簡単に条件付きの整形でこれを行うことができます。それはあなたの場合の選択肢ではありませんか? –

+2

あなたはそれを* '白くしなさい' *にしたくありません。塗りつぶしの色をすべて削除します。 'Cell(nRow、nColumn).Interior.Color = 1'の代わりに' Cells(nRow、nColumn).Interior.PATTERN = xlNone'を使います。 – Jeeped

+0

フェルナンド - 私はその選択肢を持っていますが、私は頻繁に複数のExcelシートを再ダウンロードする必要があります。だから私はそれをスピードアップするためにVBAを使うことを望んでいました。 – Elise

答えて

0

これを試してみてください。私はあなたのチェッカーの大部分をパラメータ付きの別のサブに入れました。最初のサブは、あなたが選んだ名前のものです。他は、確認したいセルを参照するさまざまな方法の例です。それに続いて、セルをループしてチェックを行いますが、ネストされたfor-nextループはありません。最後のサブは会話の拡張であり、すべてのExcelインデックスカラーの表を含む参照ワークシートを作成します。

3つのパラメータは、1)チェックするセルの範囲、2)チェックのしきい値、3)セルを変更する色です。

パラメータを持つサブにブレークアウトする理由は、このワークシートをWorksheet_ChangeイベントとWorkbook_SheetChangeイベントから作成しようとしていたためです。これは、ExcelのUIでの通常の条件付き書式設定を素晴らしい拡張にすることができますが、その厄介なコントロールの制約はありません。特定のセルまたはセル範囲で特定の値を入力すると、Excelがその能力の範囲内で何かを実行できるようにすることができます。

しかし、これらのイベントをこのように実装する私の方法では、Intersect()関数を使用する必要があります。私は以前には思い出せない奇妙なエラーが発生しています。私はそれらを作業し、完成したコードで報告します。

Sub moreThan10Percent() 
    checkValues Range(Cells(2, 6), Cells(1937, 6)), 0.1, 3 
End Sub 

Sub moreWays1() 
    checkValues Range("F2:F1937"), 0.1, 6 
End Sub 

Sub moreWays2() 
    checkValues Intersect(Range("F:F"), Range("2:1937")), 0.1, 6 
End Sub 

Sub moreWays3() 
    checkValues Intersect(Columns(6).EntireColumn, Range(Rows(2).EntireRow, Rows(1937).EntireRow)), 0.1, 6 
End Sub 

Sub moreWays4() 
    checkValues Intersect(Columns(6).EntireColumn, Range(Rows(2), Rows(1937).EntireRow)), 0.1, 6 
End Sub 

Sub checkValues(targetRange As Range, targetThreshold As Single, targetColor As Long) 
    Dim targetCell As Range 
    For Each targetCell In targetRange 
     With targetCell 
      If .value >= targetThreshold Then 
       .Interior.ColorIndex = targetColor 
      Else 
       .Interior.ColorIndex = xlColorIndexNone 
      End If 
     End With 
    Next 
End Sub 

Sub generateTableOfExcelColorIndexes() 
    Dim cell As Range 
    Dim i As Integer 
    Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "COLORS" 
    i = 0 
    For Each cell In Range("A1:H7") 
     i = i + 1 
     With cell 
      .HorizontalAlignment = xlCenter 
      .value = i 
      With cell.Interior 
       .Pattern = xlSolid 
       .ColorIndex = i 
      End With 
     End With 
    Next 
End Sub 
は、あなたの場合、単に `の場合に変更
関連する問題