2014-02-28 1 views
3

VBA에 비교적 익숙하지 않습니다. 수정 된 셀의 같은 행에있는 특정 셀 비우기

다음은 내가이 내 헤더이기 때문에이 코드는 1 행을 제외한 모든 행에서 실행하고자하는 단지 2

Option Explicit 

    Public precedent 

    Private Sub Worksheet_Change(ByVal Target As Range) 
     If Not Intersect(Target, Me.[D2]) Is Nothing Then 
      If Me.precedent <> Me.[D2].Value Then 
       Me.[F2] = "" 
       Me.[H2] = "" 
       Me.precedent = Me.[D2].Value 
      End If 
     End If 
    End Sub 

을 행에 작동하는 내 코드입니다.

어떻게하면됩니까? 루프를 사용합니까?

+0

아니, 루프는 해결책이 아니다. 'Target'의 열 인덱스를 확인하십시오. 4 일 경우 F와 H를 삭제하십시오. – Manhattan

답변

4

너무 복잡해서는 안됩니다. Target.RowTarget.Column을 확인하십시오. 전자가 1보다 크고 후자가 4 인 경우 원하는 동작을 트리거하십시오.

그에 따라 다음 코드를 수정하십시오.

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Row > 1 And Target.Column = 4 Then 
     Range("F" & Target.Row) = vbNullString 
     Range("H" & Target.Row) = vbNullString 
    End If 
End Sub 

이 정보가 도움이되는지 알려주십시오. 다음은

+0

환상적인 코드입니다. 완벽하게 작동합니다 ... 감사합니다. –

+0

+1 짧고 맑음 :) –

-1

난 당신이 하나를 필요가 있다고 생각 :

Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Column <> 4 Then Exit Sub 

    If Me.Cells(Target.Row, 4) = "" Then 
     Me.Cells(Target.Row, 6) = "" 
     Me.Cells(Target.Row, 8) = "" 
    End If 
End Sub 
+1

이렇게하면 열 D가 필요 없으며 1 행을 생략하지 않아도되는 D 열이 지워집니다. 이는 필수 사항입니다. – thunderblaster

1

당신은 루프를 사용하지 것이다. 첫 번째 행을 생략하기 때문에이 코드가 수정 될 때 실행되는 범위를 설정해야합니다. 현재 D2에 대해서만 확인하고 있습니다. 당신의 If 문 전체 범위를 검사 할 때, 당신은 그 변경된 특정 세포로 Target을 사용할 수 있습니다 여기에

당신이 원하는 것을해야 할 몇 가지 코드입니다 (대신 D2를 사용.) :

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rangeToCheck As Range 
rangeToCheck = Range(Cells(2,4),Cells(Application.ActiveSheet.UsedRange.Rows.Count,4)) 'If your range isn't dynamic, you could put static numbers here 
    If Not Intersect(Target, rangeToCheck) Is Nothing Then 'Now checks against all of Column D, omitting Row 1 
     If Target.precedent <> Target.Value Then 
      Target.Offset(0,2).Value = "" 'Clear Column F in Target Row 
      Target.Offset(0,4).Value = "" 'Clear Column H in Target Row 
      Target.precedent = Target.Value 
     End If 
    End If 
End Sub 
0

은 행 1 주에게의 셀에만 및 .Column 속성을 건너 뜁니다 코드 '대상'

Option Explicit 

Public precedent 
Private Sub Worksheet_Change(ByVal Target As Range) 
Debug.Print Target.Column 
Debug.Print Target.Row 
    If Target.Row <> 1 Then 
     If Not Intersect(Target, Me.[D2]) Is Nothing Then 
      If Me.precedent <> Me.[D2].Value Then 
       Me.[F2] = "" 
       Me.[H2] = "" 
       Me.precedent = Me.[D2].Value 
      End If 
     End If 
    End If 
End Sub