2014-11-28 2 views
0

나는 이것을 매우 짧은 방법으로 작성하는 데 어려움을 겪어왔다. 아마도 간단 할 것이지만 범위가 변경되는 동안 중첩 된 if를 갖는 내 머리를 얻을 수 없다. ?이 VBA 코드를 더 짧게/더 깔끔하게 작성하는 방법

데이터는 7 열, 일요일부터 토요일 기본적으로 보고서에는 M3에서 최대 데이터가있는 것으로 파악해야합니다. Sx, 그래서 현재 전체 주를 가정 한 다음 확인을 위해 거꾸로 작업하고 있습니다. 데이터 없음.

어떤 날은 그래서 일요일 목요일까지 데이터 다음 데이터 없음이있을 수 있습니다 사이에 비어있을 수 있습니다, 그래서 오프셋 기능을 루프를 사용하는

iDayNumber = 7 

    If WorksheetFunction.CountA(.Range("S" & iFirstRow & ":S" & iLastRow)) = 0 Then 
     iDayNumber = iDayNumber - 1 

     If WorksheetFunction.CountA(.Range("R" & iFirstRow & ":R" & iLastRow)) = 0 Then 
     iDayNumber = iDayNumber - 1 

      If WorksheetFunction.CountA(.Range("Q" & iFirstRow & ":Q" & iLastRow)) = 0 Then 
      iDayNumber = iDayNumber - 1 

      If WorksheetFunction.CountA(.Range("P" & iFirstRow & ":P" & iLastRow)) = 0 Then 
       iDayNumber = iDayNumber - 1 

       If WorksheetFunction.CountA(.Range("O" & iFirstRow & ":O" & iLastRow)) = 0 Then 
        iDayNumber = iDayNumber - 1 

        If WorksheetFunction.CountA(.Range("N" & iFirstRow & ":N" & iLastRow)) = 0 Then      
         iDayNumber = iDayNumber - 1 

         If WorksheetFunction.CountA(.Range("M" & iFirstRow & ":M" & iLastRow)) = 0 Then 

         Application.ScreenUpdating = True 
         If MsgBox("There is no data in the current week." & vbCrLf & "Cannot Continue.", _ 
          vbOKOnly + vbCritical, "Aborting") = vbOK Then 

          Exit Sub 

          End If 
         End If 
        End If 
        End If 
       End If 
       End If 
      End If 
     End If 
    End If 

답변

2

시도,이 경우 5로 iDayNumber 필요

For i = 6 To 0 Step -1 
    If WorksheetFunction.CountA(.Range("M" & iFirstRow & ":M" & iLastRow).Offset(0, i)) = 0 Then 
     iDayNumber = iDayNumber - 1 
    Else 
     Exit For 
    End If 
Next i 
+0

왼쪽으로 이동해야 하나, 마이너스로 루프를 작성하는 방법은 무엇입니까? 감사! –

+0

죄송합니다. 방금 내 오류를 알려 드려 죄송합니다. – Seb

+0

아니요. 7시에 시작해야하며, 오른쪽에서 최신 데이터 인 –

관련 문제