2016-06-16 3 views
-1

안녕하세요 아래 코드로 작업하고 있지만 워크 시트에서 한 번에 전체 열 (여러 셀)을 삭제하려고하면 오류가 표시됩니다. 코드는 if 문과 함께 잘 작동합니다. 모든 "M"을 삭제할 수 없습니다 & "I"문자를 시트에서 한 번에 삭제하십시오. 아래 코드입니다 :vba if 문 오류

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
If Target.Column = 18 Then 
    ThisRow = Target.Row 
    If Target.Value = "M" Then 
     Range("AB" & ThisRow) = "NA" 
    ElseIf Target.Value = "I" Then 
    Range("AB" & ThisRow) = "" 
    Else 
    Range("AB" & ThisRow) = "" 
    End If 
    If Target.Value = "M" Then 
     Range("AC" & ThisRow) = "NA" 

    ElseIf Target.Value = "I" Then 
    Range("AC" & ThisRow) = "" 
    Else 
    Range("AC" & ThisRow) = "" 
    End If 
     End If 
End Sub 

업데이트 코드

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim r As Integer, lastRow As Integer 

If (Not Target.Column = 24) Then Exit Sub 
If (Target.Columns.Count > 1) Then Exit Sub 

lastRow = Cells.SpecialCells(xlCellTypeLastCell).Row 

Application.ScreenUpdating = False 
For r = Target.Row To Target.Row + Target.Rows.Count - 1 
    Range("Z" & r & ",AA" & r & ",AB" & r & ",AC" & r) = IIf(Cells(r, 24) = "Yes", "NA", "") 
    Range("Y" & r & ",Z" & r & ",AA" & r & ",AB" & r & ",AC" & r & ",AD" & r) = IIf(Cells(r, 24) = "No", "NA", "") 
    If (r = lastRow) Then Exit Sub 
Next r 
Application.ScreenUpdating = True 

최종 하위

+1

가 슬로우 오류 무엇이며 어느 선이 그것을 일으키는가? – RGA

+0

이 줄 ('ElseIf Target.Value = "I"Then')은 목적이 없습니다; 코드에서 Target 셀의 값이 M이면 AB/AC를 "NA"로 바꾸고 그렇지 않으면 ""로 바꿉니다. 'Else'의 결과가 똑같다면'ElseIf'는 필요 없습니다. – Dave

답변

1
전체 목표 컬럼이 경우 전에 먼저이 줄을 삽입하여 삭제 될 때 당신은 코드를 탈출 할 수

성명 :

If (Target.Rows.Count > 1) Then Exit Sub 

또한 동시에 표적 세포를 업데이트하고 값을 계산하기 위해 IIF 문을 사용하여 코드를 단순화 할 수 있습니다

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim r As Byte 
    If (Target.Rows.Count > 1) Then Exit Sub 

    If Target.Column = 18 Then 
     r = Target.Row 
     Range("AB" & r & ",AC" & r) = IIf(Target.Value = "M", "NA", "") 
    End If 
End Sub 

업데이트하는 여러 행을 편집하려면 :

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim r As Integer, lastRow As Integer 

    If (Not Target.Column = 18) Then Exit Sub 
    If (Target.Columns.Count > 1) Then Exit Sub 

    lastRow = Cells.SpecialCells(xlCellTypeLastCell).Row 

    Application.ScreenUpdating = False 
    For r = Target.Row To Target.Row + Target.Rows.Count - 1 
     Range("AB" & r & ",AC" & r) = IIf(Cells(r, 18) = "M", "NA", "") 
     ' repeat above line for further checks 
     Range("AE" & r & ",AF" & r) = IIf(Cells(r, 18) = "S", "NA", "") 

     If (r = lastRow) Then Exit Sub 
    Next r 
    Application.ScreenUpdating = True 
End Sub 
+0

코드가 제대로 작동하지만 "M"과 같은 값을 제거하면 채워진 셀도 삭제해야합니다. 삭제 된 후에도 모든 채워진 셀은 비어 있어야합니다. – Striker

+0

또한 "M"과 다른 검증을 추가해야하는지, 즉 "S"에 대해 다른 셀에 "NA"를 강조 표시하려면 위의 코드에서 변경해야 할 사항을 알 수 있습니까? – Striker

+0

나는 당신의 질문을 이해하지 못합니다. _ 다른 세포가 표적이나 출처입니까? 열 R에 값 "S"가 들어있을 때 별도의 목록 (즉, 다른 대상)을 만들려면 For 루프 내의 첫 번째 행을 복사 한 후 바로 삽입하고 값을 업데이트하십시오. 출력을 같은 목록에 넣고 싶다면'IIf (셀 (r, 18) = "M"또는 셀 (r, 18) = "S"와 같은 IIF 조건에 새로운 조건을 추가하기 만하면됩니다. NA "," ")'. – lonestorm