2016-11-03 31 views
0

ワークシート内の領域をフォーマットしようとしています。vba範囲オフセット範囲の相対値

私はWorksheet_Changeを使用しているため、変更時に常に更新されます。

私の目標は、地域内のすべてのセルを見ることです。現在のセルが空で左のセルの数値が0の場合、現在のセルに「N/A」というテキストを入力します。

オフセットを使用できないため、試行に失敗しています。

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim updateCells As Range 
    Dim myCell As Range 

    Set updateCells = Range("B1:M1000") 

    For Each myCell In updateCells 
     ' NEXT LINE WRONG!! 
     If myCell.Offset(0, -1).Value = 0 Then 
      myCell.Interior.ColorIndex = 4 
     End If 

    Next 

End Sub 

いずれかの指針が認められます。

+0

が '' 'ない –

+0

こんにちはスコット(-1、0)オフセット'左側の上のセルを見ている(0、-1)をオフセットこの道を行くだろう、 フィードバックをお寄せいただきありがとうございます。私はそれを間違ってコピーしました。しかし、この変更さえ間違っています。私のセットアップとループは範囲を超えていますか? – LiamD

答えて

1

ターゲットのセルがRange("B1:M1000")にあるかどうかをテストします。 ActiveSheetの値を変更するときは、イベントWorksheet_Changeから常にイベントをオフにする必要があります。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 

    Dim r As Range 
    For Each r In Target.Cells 
     If Not Intersect(r, Range("B1:M1000")) Is Nothing Then 
      If r.Value = "" And Not r.Offset(0, -1).Value = "" And r.Offset(0, -1).Value = 0 Then 
       r.Value = "N\A" 
       r.Interior.ColorIndex = 4 
      Else 
       r.Interior.ColorIndex = -4142 
     End If 
    Next 

    Application.EnableEvents = True 
End Sub 
+0

トーマス - 素晴らしい!これは治療法です。 – LiamD

1

私は

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, myRng As Range 

    On Error GoTo ExitSub '<--| be sure to exit sub in a managed way and restore events handling 
    Set myRng = Intersect(Target, Range("B1:M1000")).SpecialCells(xlCellTypeBlanks) '<--| get blank changed cells belonging to relevant range 
    Application.EnableEvents = False '<--| turn rvents handling ofF 
    For Each rng In myRng '<--| loop through filtered range only 
     If Not rng.Offset(0, -1).Value = "" And rng.Offset(0, -1).Value = 0 Then 
      rng.Value = "N\A" 
      rng.Interior.ColorIndex = 4 
     Else 
      rng.Interior.ColorIndex = -4142 
     End If 
    Next 

    ExitSub: 
    Application.EnableEvents = True '<--| turn events handling on 
End Sub 
+0

いいですが、私は前にOn Errorをおすすめします。スペシャルセル – Slai

+0

@Slai、そうです。それは後の "IF myRng ..."も不要にします。編集済み – user3598756