2016-06-29 1 views
0

두 개의 셀이 VBA에서 이 아닌지 확인하려합니다. VBA에서이 비어 있습니다. 나는 IsEmpty()을 사용하고 있습니다. 그러나 나는 그것들을 올바르게 사용하고 있다고 생각하지 않습니다. 이것이 내가 가진 것입니다. 항상 if 문으로 들어가기 때문에 작동하지 않습니다.두 셀이 비어 있는지 확인하십시오.

if 안에는 일부 세포를 조작하고 있습니다. 내가 다른 사람에게 들어가면 나는 그들을 조작해서는 안된다. (아무 것도하지 않는다.) 그러나 그들은 또한 변하기 시작한다.

For i = 2 To rows 
     If ((Not IsEmpty(Cells(i, 4))) And (Not IsEmpty(Cells(i, 5)))) Then 
      'Do stuff... 
     else 
      'Do nothing... 
     end if 
next i 

가장 좋은 방법인가요?

+0

* 제대로 사용하지 않는 것 같습니다. 작동하지 않습니까? 그리고 그것에 대해 작동하지 않는 것은 무엇입니까? 당신은 단순히 논리를 뒤집고 "Len"(더 잘 작동하는 것처럼 보임)을 사용할 수 있습니다 ... 만약 Len (Cells (i, 4)) = 0이고 Len (Cells (i, 5)) = 0이면 'do 그 외에는 아무것도 안 함 End If' –

+0

'셀 (i, 4) <> ""및 셀 (i, 5) <> "" –

답변

1

이들은 모두 유효한

만약 ((안 IsEmpty 함수 (세포 (I, 4))) 그리고 (안 IsEmpty 함수 (세포 (I, 5)))) 다음

하면 세포 (I, 4) <> ","셀 (Ⅰ, 5) <> ""그

경우 렌 (세포 (I, 4)) 렌 (세포 (I, 5)) 다음

경우 Len (셀 (i, 4))> 0 및 Len (셀 (i, 5))> 0 Then

개인적으로 Len()을 사용하고 있습니다. 나는 그것이 깨끗한 표정이라고 생각한다.

코드를 with 문에 배치하면 다른 워크 시트의 범위를보다 쉽게 ​​비교할 수 있습니다.

With managerSheet 

    For i = 2 To rows 
      If Len(.Cells(i, 4)) And Len(.Cells(i, 5) Then 
       'Do stuff... 
      else 
       'Do nothing... 
      end if 
    next i 

End With 
0

내 문제는 내 if 문이 아니라 내 전화의 범위입니다. 셀 범위를 포함하는 것을 잊었습니다. managerSheet.Cells(i, 4).. etc 도움을 주셔서 감사합니다.

0

내가 일반적으로하는 방법은 참조 된 셀을 유형을 확인하는 것입니다. 내가 아는 한 셀을 참조 할 때 인터프리터는 값에 가장 적합한 유형을 반환합니다. 즉 1Double을 반환하고 "abc"String을 반환합니다. 셀이 비어 있으면 반환되는 유형은 Empty입니다.

나는 here이라는 기술을 사용하여 성능 테스트를 수행했다.

테스트 1 : 유형 Empty에 세포를 비교 만 그것은 깨끗하게 보이지 않을 수

dTime = MicroTimer 
For i = 1 To 10000 
    If Cells(i, 4) <> Empty And Cells(i, 5) <> Empty Then 
    'Do something 
    Else 
    'Do nothing 
    End If 
Next i 
dTime = MicroTimer - dTime '21.0493610010926 
21.0493610010926 걸렸지 만 : 세포를 비교 Len() 사용은 40.9080069854244

dTime = MicroTimer 
For i = 1 To 10000 
    If Len(Cells(i, 4)) And Len(Cells(i, 5)) Then 
    'Do something 
    Else 
    'Do nothing 
    End If 
Next i 
dTime = MicroTimer - dTime '40.9080069854244 

이 시험이했다 확실히 이익이 있다면.