2012-06-16 26 views
1

我爲新問題表示歉意,但尚未在線找到解決方案。我正在嘗試在VBA的日期範圍內做一個簡單的if-then語句。我的代碼(不工作)迄今:如果 - 然後/選擇大小範圍單元格中定義的日期範圍

  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,這是不正確選擇「其他」的價值。

單元格O8:'Some_dates'工作表中的P11定義了四個日期範圍(開始是列O,結束是列P)。這些日期可能看起來像數字或日期,具體取決於您如何格式化單元格。 「Some_dates」工作表中的N列對每個日期範圍都有標籤。

任何幫助表示讚賞!

回答

3

如果你比較的所有內容都是日期,那麼Val就是問題所在。 Val(1/1/2012),其中2012年1月1日是一個「真正的」Excel日期(或假的一個)返回「1」。 Val將字符串的開頭返回到第一個非數字字符。因此,嘗試:當日期都存儲在通用或數字格式,然後瓦爾返回整個號(串)

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

您的代碼應該工作。

+0

This Works! - 謝謝。 –