>

내 코드의 일부입니다. 간단하게 만들 수있는 방법이 있습니까? 감사합니다.

For i = 2 To ws.Range("E1").CurrentRegion.Rows.Count
If ws.Cells(i, 4).Value Like ("*SSI*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Settlement instruction*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*delivery Instruction*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Request form*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.cells(i, 4).Value Like ("*Sales to onboarding*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Application*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Doc Check list*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Prime to Credit*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Prime to Legal*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Prime_Legal*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Prime_Credit*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*LEXIS*") Then ws.Cells(i, 4).EntireRow.Delete
If ws.Cells(i, 4).Value Like ("*Withdrawal Request*") Then ws.Cells(i, 4).EntireRow.Delete
Next i


  • 답변 # 1

    이 작업을 수행하는 방법은 많이 있지만 여기에 하나가 있습니다 :

    먼저 행을 삭제할 때 항상 범위의 맨 아래에서 시작하여 위로 이동하십시오. 이렇게하면 삭제시 행 건너 뛰기가 방지됩니다.

    쉼표를 사용하여 텍스트를 분할하여 배열을 만들었습니다. 데이터에 쉼표가 포함되어 있으면 변경해야합니다.

    Dim tmpAr As Variant
    Dim test As Variant
    Set ws = ActiveSheet
    tmpAr = Split("SSI,Settlement instruction,delivery Instruction,Request form,Sales to onboarding,Application,Doc Check list,Prime to Credit,Prime to Legal,Prime_Legal,Prime_Credit,LEXIS,Withdrawal Request", ",")
    For i = ws.Range("E1").CurrentRegion.Rows.Count To 2 Step -1
        For Each test In tmpAr
            If ws.Cells(i, 4).Value Like "*" & test & "*" Then
                ws.Cells(i, 4).EntireRow.Delete
                Exit For
            End If
        Next
    Next i
    
    

  • 답변 # 2

    이 라인을 따라 시도해 볼 수 있습니다

    Sub del()
    Dim a As Variant
    Dim s As Variant
    Dim r As Range
    Dim l As Long
    a = Array("*abc*", "*def*", "efg*", "abcdef*hi")
    Set r = Range("a1:a20")
    For l = r.Rows.Count To 1 Step -1
        For Each s In a
            If r.Cells(l, 1).Value Like s Then
                    Rows(l).EntireRow.Delete
                    Exit For
            End If
        Next s
    Next l
    End Sub
    
    

  • 답변 # 3

    루프를 뒤로 실행

    재 계산 방지

    한 번만 삭제


    For i = ws.Range("E1").CurrentRegion.Rows.Count To 2 Step -1
        DR = False
        Set r = ws.Cells(i, 4)
        s = r.Value
        If s Like ("*SSI*") Then DR = True
        If s Like ("*Settlement instruction*") Then DR = True
        If s Like ("*delivery Instruction*") Then DR = True
        If s Like ("*Request form*") Then DR = True
        If s Like ("*Sales to onboarding*") Then DR = True
        If s Like ("*Application*") Then DR = True
        If s Like ("*Doc Check list*") Then DR = True
        If s Like ("*Prime to Credit*") Then DR = True
        If s Like ("*Prime to Legal*") Then DR = True
        If s Like ("*Prime_Legal*") Then DR = True
        If s Like ("*Prime_Credit*") Then DR = True
        If s Like ("*LEXIS*") Then DR = True
        If s Like ("*Withdrawal Request*") Then DR = True
        If DR Then ws.Cells(i, 4).EntireRow.Delete
    Next i
    
    

  • 답변 # 4

    참고 :

    <올>

    행이 삭제되면 셀이 위로 이동하여 아래 행에 동일한 행 번호가 적용되므로 i = i - 1 대신 루프를 사용하는 이유  행/e를 삭제 한 후 : 예 -1 단계를 사용하거나 다르게 작성할 수 있지만 다른 답변과 다른 것을 표시하고 싶습니다

    연산자처럼 사용할 필요가 없으며, vbs에서는 지원되지 않으므로 vbs를 배우기로 결정한 경우이를 피하는 것이 좋습니다

    내 접근 방식은 배열에 키워드를 계속 추가하거나 컬렉션을 대신 만들 수 있습니다.

    MyArr = Array("SSI", "Settlement instruction", "delivery Instruction", "Request form", "Sales to onboarding", "Application", "Doc Check list", "Prime to Credit", "Prime to Legal", "Prime_Legal", "Prime_Credit", "LEXIS", "Withdrawal Request")
    LastRow = ws.Range("E1").CurrentRegion.Rows.count
    i = 1
    Do Until i > LastRow
        i = i + 1
        cVal = ws.Cells(i, 4).Value
        For Each ma In MyArr
            If InStr(1, cVal, ma) > 0 Then
                ws.Cells(i, 4).EntireRow.Delete
                i = i - 1 'cells below will shift up, so next row will have the same row number
                Exit For
            End If
        Next
    Loop
    
    

  • 이전 amazon sagemaker - 내장 알고리즘 용 노트북을 사용하지 않고 S3에서 교육 데이터를 전처리하는 방법
  • 다음 java - 생성자에서 applicationproperties 값에 액세스하는 방법