2012-06-16 3 views
1

newb 질문에 사과하지만 온라인에서 해결책을 찾지 못했습니다. 나는 VBA의 날짜 범위에서 간단한 if-then 문을 사용하려고합니다. 내 코드까지 (작동하지 않는) :셀 참조에 정의 된 기간의 If-then/Select 케이스

  LR = 52 
      Set rngData = Range("D2:D" & LR) 
      'define the data range to evaluate 
      For Each rngCell In rngData 
       Select Case rngCell.Value 
        Case Val(Range("'Some_dates'!O8").Value) To Val(Range("'Some_dates'!P8").Value): rngCell.Value = Range("'Some_dates'!N8").Value 
        Case Val(Range("'Some_dates'!O9").Value) To Val(Range("'Some_dates'!P9").Value): rngCell.Value = Range("'Some_dates'!N9").Value 
        Case Val(Range("'Some_dates'!O10").Value) To Val(Range("'Some_dates'!P10").Value): rngCell.Value = Range("'Some_dates'!N10").Value 
        Case Val(Range("'Some_dates'!O11").Value) To Val(Range("'Some_dates'!P11").Value): rngCell.Value = Range("'Some_dates'!N11").Value 
       Case Else: rngCell.Value = "Outside date ranges" 
       End Select 
      Next rngCell 

출력을 모든 셀에 대한 것은 잘못된 것입니다 rngData의 모든 세포에 대해 "다른"값을 선택하는 것을 의미하는 "외부 날짜 범위"입니다.

셀 'Some_dates'워크 시트의 O8 : P11은 네 개의 날짜 범위를 정의합니다 (시작은 O 열이고 끝은 P 열임). 셀을 포맷하는 방법에 따라 숫자 나 날짜와 같이 볼 수있는 날짜입니다. 'Some_dates'워크 시트의 열 N에는 각 날짜 범위에 대한 라벨이 있습니다.

도움을 주시면 감사하겠습니다.

답변

3

비교할 항목이 모두 날짜 인 경우 Val이 문제입니다. Val(1/1/2012), 여기서 1/1/2012는 "실제"Excel 날짜 (또는 해당 항목의 가짜 값)는 "1"을 반환합니다. Val은 문자열의 시작 부분을 첫 번째 숫자가 아닌 문자까지 반환합니다. 따라서 시도하십시오 :

Case Range("'Some_dates'!O8").Value To Range("'Some_dates'!P8").Value: rngCell.Value = Range("'Some_dates'!N8").Value 

날짜가 일반 또는 숫자 형식으로 저장되어 있으면 Val이 전체 ​​숫자 (문자열)를 반환하므로 코드가 작동해야합니다.

+0

이것은 작동합니다! -- 고맙습니다. –