vba - If-then/为单元格引用中定义的日期范围选择案例

标签 vba excel select-case

我为新手问题道歉,但尚未在线找到解决方案。我正在尝试对 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”值,这是不正确的。

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

任何帮助表示赞赏!

最佳答案

如果您要比较的所有内容都是日期,那么 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

当日期以 General 或 Number 格式存储时,您的代码应该可以工作,因为 Val 返回整个数字(字符串)。

关于vba - If-then/为单元格引用中定义的日期范围选择案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066107/

相关文章:

excel - Powerquery 按组运行计数

sql - 插入选择案例

JavaScript:在 switch case 中使用条件

vba - 多个条件的嵌套 Select Case

excel - 如何使用 ftp、http 或套接字从电子表格中使用 VBA for Microsoft Office 上传数据?

vba - 如何将 ShapeRange.group 复制为图片

VBA : Remove know password from multiple documents (improve code)

Excel WorkbookBeforeClose 事件多次触发

objective-c - 确定 SQLite、CSV 或 Excel 中的架构字段类型

vba - Excel VBA 打开工作簿而不复制它