If-then / Select Case用于单元格引用中定义的日期范围

时间:2012-06-16 18:43:16

标签: vba excel-vba select-case excel

我为新问题道歉,但没有在网上找到解决方案。我试图在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中的所有单元格选择“else”值,这是不正确的。

单元格O8:'Some_dates'工作表中的P11定义了四个日期范围(start是列O,end是列P)。这些日期可能看起来像数字或日期,具体取决于您格式化单元格的方式。 “Some_dates”工作表中的N列具有每个日期范围的标签。

感谢任何帮助!

1 个答案:

答案 0 :(得分: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返回整个数字(字符串)。