2016-10-07 3 views
0

VBA를 사용하는 데 약간 익숙합니다. 내가 사용하는 프로그램 중 하나에서 데이터를 가져오고 Microsoft Query를 통해 필터링되는 데이터 테이블이 있습니다. 정렬 할 수없는 열이 하나 있으므로 원하지 않는 데이터를 제거하려면 if 및 statement를 사용해야합니다. 이 삭제 문을 강조하는 행을 만들었지 만 VBA에 넣는 방법을 모르겠습니다.IF & Statement from VBA

=IF(L5="Program",L6<>"lathe"),"2","") 

기본적으로 VBA가 L : L 열을보고 싶습니다. 만약 cell = program이고, 아래 셀이 선반과 같지 않다면 위의 행을 지우고 싶습니다. 셀이 프로그램과 같지 않으면 데이터가 끝날 때까지 계속 찾습니다. 당신은 아마 어떤 종류의 범위 변수로 Range(...) 문을 대체 할 수 있습니다

If Range("L5")="Program" And Range("L6") <> "lathe" Then 
    'Do something 
End If 

:

+0

새로운 논리에 행 3에서 상상해 열 L.에 루프이지만,에 필요 다른 열을 사용하여 정렬 할 수 있습니다. 열 E : E를보기 위해 VBA가 필요합니다. 아래 행의 셀이 위 셀의 복제본 인 경우 해당 행의 열 L을 살펴보고 셀에 프로그램이 있는지 확인하십시오. 그렇다면 아래 셀이 선반이어야합니다. 선반이 아닌 경우 프로그램 행을 삭제하고, 선반 인 경우 두 행을 종료합니다. 열 E의 셀이 중복되지 않으면 계속 찾고 있습니다. 전의. E5 = E6이면, 계속 찾지 않습니다. 그렇다면 L5를보고 그것이 프로그램을 말하는지 확인하십시오. 그렇다면 L6에서 선반을보십시오. 그렇지 않으면 ROW5를 삭제하십시오. –

답변

2

은 VBA에서, 당신은 ... 따라서 그런 구조를, ...는 IF를 사용 것 당신이 정말로 관심이있는 셀을 저장하십시오. 그러나 그것은 당신이 찾고있는 구조에 대한 아이디어를 줄 것입니다.

EDITED 추가 할 :

루프 열 L 모두를 통해 같은

Dim rngCheck as Range 
Dim rngCell as Range 

Set rngCheck = Range("L1", "L" & Rows.Count - 1) 

For each rngCell in rngCheck 
    If rngCell.value = "Program" And rngCell.offset(1,0).value <> "lathe" then 
     rngCell.offset(-1,0).EntireRow.Delete 
    End if 
Next rngCell 

이 :
이 (열 L)이 모든 셀을 통해
루프보고 범위를 작성 열 (각 루프에 대해)
IF 논리를 실행하고
... 논리가 충족되면 전체 행을 삭제합니다.

+0

전체 L : L 열에서 VBA를 적용하는 방법 –

+0

한 번에 한 열씩 L 열을 반복 할 수 있습니다. 이 구조를 반영하도록 수정하겠습니다. – Werrf

+0

응용 프로그램 정의 또는 개체 정의 오류로 실행 중입니다. –

1

여기에 아이디어가 있습니다. 원하는대로 형식을 수정하면됩니다.

If cells(5, "L") = "Program" AND cells(6, "L") <> "Lathe" Then 
    cells (6, "M") = 2 
Else 
    cells (6, "M") = "" 
EndIf 
1

있는 최선 데이터가 150 나는 여전히 이전 프로그램의 일부를 사용할 것이라고 생각

for i = 3 to 150 
    if lcase(range("L"&i).value) = "program" and lcase(range("L"&i+1).value) <> "lathe" then 
     rows(i).entirerow.delete 
    end if 
next i