首页 > 解决方案 > 在 Excel/VBA 中使用 CountIF 和 01.03.1900 之前的日期

问题描述

我对 Execl 有一个奇怪的问题。特定单元格的值 ist 01.01.1900,单元格的格式为date-Format。01.01.1900当我尝试通过CountIfresult is计算有多少实例时0,搜索词是通过CDate()-conversion 创建的。这是完整的代码:

Dim searchterm as Date
Dim someRange as Range
searchTerm = CDate("01.01.1900")
Application.WorksheetFunction.CountIf(someRange, searchTerm)

当日期开始之前,整个事情按预期工作01.03.1900。根据相关日期,01.01.1900我得到以下结果:

VarType(singleCellRange)返回7日期格式

singleCellRange.Value返回31.12.1899(另见此处

所以问题是:我如何为有问题的日期获得正确的格式以便CountIf再次工作?

标签: excelvbadate

解决方案


VBA 日期数据类型和 Excel 日期不同。

它们都存储为序列号,但使用 Excel,(使用 1900 系统):

  • Excel,(使用1900系统):1-->1 Jan 1900
  • VBA: 1-->31 Dec 1899

由于 Excel 将(错误地)识别29 Feb 1900为有效日期,因此基础值在1 Mar 1900此后变得一致。

根据在此范围内计算日期的重要性,有多种解决方法。

1如果日期早于1-Mar-1900.

编辑:据一些人说,对这个错误的解释据说是为了与引入 Excel 时的首要工作表兼容:Lotus123,它有同样的错误。所以它和 Excel 一样长,它不太可能被改变,因为害怕破坏考虑到它的程序。


推荐阅读