2014-01-07 6 views
0

내부에 If 문이있는 for-each 루프에 약간 문제가 있습니다.각 루프에 대한 Excel VBA

Private Sub Worksheet_Calculate() 

Dim rng1 As range 
Dim cell1 As range 
Set rng1 = range("A1") 

Application.EnableEvents = False 

For Each cell1 In rng1 

    While rng1.Rows.Count > 1 

     If cell1.Value >= 6000 And cell1.Value < 8000 Then 
      range("2:5").EntireRow.Hidden = False 
      range("B1:B5").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/4" 
      Set rng1 = rng1.Resize(4) 

     ElseIf cell1.Value >= 4000 And cell1.Value < 6000 Then 
      range("2:3").EntireRow.Hidden = False 
      range("4:5").EntireRow.Hidden = True 
      range("B1:B4").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/3" 
      range("B5:B5").ClearContents 
      Set rng1 = rng1.Resize(3) 

     ElseIf cell1.Value >= 2000 And cell1.Value < 4000 Then 
      range("2:2").EntireRow.Hidden = False 
      range("3:5").EntireRow.Hidden = True 
      range("B1:B3").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/2" 
      range("B4:B5").ClearContents 
      Set rng1 = rng1.Resize(2) 

     ElseIf cell1.Value >= 0 And cell1.Value < 2000 Then 
      range("2:5").EntireRow.Hidden = True 
      range("B1:B1").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))" 
      range("B2:B5").ClearContents 

     End If 
    Wend 
Next 

Application.EnableEvents = True 

최종 하위

은 기본적으로 내가이 있지만 제대로 작동하지 싶지 : 여기

코드입니다 그것은 범위를 보인다. 범위 값이 4000과 6000 사이에 있으면 3 행을 숨기고 4 행을 숨기고 3 개의 보이는 행을 수식과 동일하게 설정하고 3 행 사이의 범위 값을 균등하게 나누고 숨겨진 행의 내용을 지우고 세트합니다 보이는 행의 범위와 동등하게보고 있던 원래 범위 (이것이 내 논리에 매달린 메신저라고 생각합니다). 어떤 도움이 크게 appriciated 것입니다.

+1

'범위'의 재 할당은 좋지 않습니다. – Bathsheba

+0

범위가 C1이면 루핑 포인트는 무엇입니까? –

+0

죄송합니다 범위는 A1으로 시작한 다음 표시된 A 행의 범위로 변경되었습니다. Bathsheba, 각 루프의 범위가 항상 if 문을 기반으로하는 보이는 행의 범위와 같아 지도록 코드를 수정하는 방법은 무엇입니까? – Skunny11

답변

0

a) 셀 A1 = 5000 및 셀 A2 = 3000이면 어떻게됩니까? 어떤 코드 블록이 실행됩니까? 갈등이 있습니까?

b) 범위를 변수로 사용했습니다. 다른 이름을 사용하십시오. "범위"는 예약어 여야합니다. 어떤 이름을 Range 객체로 선언하기 위해서는 R capital을 사용하는 범위를 사용해야합니다.

c) 하나의 A43 : A4를 발견했습니다. 이것은 오타입니다 - A3 : A4 여야합니까?

+0

코드를 수정했습니다. A 열은 = Sum에 대한 수식을 가지며 기본적으로 코드에있는 수식이있는 보이는 B 열의 값을 합계합니다. G5는 B 열의 수식 결과 값을 변경하는 수를 변경하여 A 열 내의 값을 변경하고 효과적으로 범위를 나타내는 값을 변경하는 위치입니다. 방금 변수로 "범위"를 사용하여 원래 게시물에 고정되었습니다. – Skunny11