2017-01-25 22 views
0

セルが空であるかどうかに基づいて、基本的にスプレッドシートの最初の行をグレーのグレーにします。たとえば、セルA1は空白ではないので、灰色に、セルB1は空白ではないため、灰色になりますが、セルC1は空白なので、まったく色付けしないでください。これまでのところ、私のスクリプトはA1に基づいて行全体を灰色にしています。これに代わる方法はありますか?VBA行のセルが空白に等しくない場合

Sub test() 
Dim c As Integer 
c = Application.WorksheetFunction.CountA(ActiveSheet.Range("A1")) 
If c > 0 Then 
    ActiveSheet.Range("A1").EntireRow.Interior.ColorIndex = 48 
End If 
End Sub 

答えて

1

エクセルVBAでの作業、それはObjectsCollectionsとどのようにそれらのループへの考え方を把握するenourmously便利です。

ウォッチウィンドウは、コードを書くときのWithキーワードと同じように、あなたの親友です。あなたのケースでは

は: Cellは、あなたのケースでWorksheet.Cells -collection内部のオブジェクト(、ActiveSheet.Rows(1).Cells -collection内側もオブジェクトである。これは、あなたが私たちを与えた情報に基づいて、何をしたいん

。 (あなたが行全体ループしないように指定いませんでし;))

Option Explicit 

Sub ColorCells() 
    Dim objCell As Object 
    With ActiveSheet 
     With .Rows(1) 
      For Each objCell In .Cells 
       With objCell 
        If .Value > 0 Then .Interior.ColorIndex = 48 
       End With 
      Next objCell 
     End With 
    End With 
End Sub 

これは、あなたにどのようにExcel- Objects仕事のアイデアを与える必要があります。

明らかに、我々はこの短いを書くことができます:

Sub ColorCells() 
    Dim objCell As Object 
    For Each objCell In ActiveSheet.Rows(1).Cells 
     If objCell.Value > 0 Then objCell.Interior.ColorIndex = 48 
    Next objCell 
End Sub 

注:

  • このコードになるあなたののループのすべての16kのCellsを。明らかに、私たちはあなたの最後の使用Cellで停止することができます。しかし、これは1秒未満で実行されるので、コードをきれいに保つために目的に残しておきます。

  • 条件付き書式設定でこれを行うことができますが、これはコードONCEで行います。つまり、あなたの条件付きフォーマット)、左。

  • 私は.CountA.EntireRowで何をしようとしたのか分かりませんが、ここではうまくいきません。

+0

おかげで、私はVBAに新たなんだと、これは素晴らしい作品にそれが私の頭をやっています。 – Hosey93

+0

うれしい私は助けることができます。質問に回答したことを明記してください。もし 'IsEmpty'のようなものが必要ならば、' objCell.Value> 0'が本当に必要なものを実行するかどうかを検討してください。 –

0

また、次のような式を使用することもできます。より多くのロジックと色を扱えるように関数を変更することができます。

これは、式が真である場合、行を緑色にします。色はRGBで指定します。あなたの答えのための

=ColorRowIF(A1=B1, 1, 181, 0)

またはあなたの場合は

=ColorRowIF(ISBLANK(B2), 1, 181, 0)

Public Function ColorRowIF(Condition As Boolean, r As Integer, g As Integer, b As Integer) As String 
    Dim row As Integer 
    row = Application.Caller.row 

    If Condition = True Then 
     ActiveSheet.Evaluate "ColorRow(" & row & ", " & r & ", " & g & ", " & b & ")" 
    Else 
     'ws.Rows(r).Interior.Color = vbRed 
    End If 

    ColorRowIF = Condition 
End Function 


Public Sub ColorRow(row As Integer, r As Integer, g As Integer, b As Integer) 

    Dim ws As Worksheet 
    Set ws = ActiveSheet 
    ws.Rows(row).Interior.Color = RGB(r, g, b) 

End Sub 


Function IsDate(CellDate As Date) As Boolean 
    If CellDate >= 1 And CellDate <= #12/31/2199# Then 
    ' 1 is equal to January 1, 1900 
     IsDate = True 
    Else 
     IsDate = False 
     End If 
End Function 
関連する問題