我收到一个工作簿,其中包含有关呼叫中心工作组处理量的信息。我无法在上游修改工作簿的格式或布局。
一个工作表包含有关处理错误的信息。
(team成员的用户ID已修订)
每个日期由合并的1x3范围表示,相关日期格式为"日-月",例如"01-Jun"
该日期通过公式从具有相同布局的另一个工作表中提取。其中一个范围的公式如下:='QA Scores'!K2:M2
我尝试使用Range.Find
来定位给定月份的第一天和同一个月的结束日期(基于用户输入)-例如,从6月1日到6月15日。
Set rngMin = .Find(What:=DateValue(minDate), _
LookIn:=xlFormulas, _
LookAt:=xlWhole)
在其他使用中,我以这种方式定位日期,但来自公式的值的复杂性似乎是这里的问题。
- 更新日期:**
根据罗恩·罗森菲尔德的回答,我写了下面这段话:
Dim UsedArr As Variant: UsedArr = SrcWS.UsedRange
blFound = False
For i = LBound(UsedArr, 1) To UBound(UsedArr, 1)
For j = LBound(UsedArr, 2) To UBound(UsedArr, 2)
If UsedArr(i, j) = MinDate Then
blFound = True
Exit For
End If
Next
If blFound = True Then Exit For
Next
5条答案
按热度按时间dpiehjr41#
使用
Range.Find
方法查找日期很困难。其中一个问题是,在VBA中,日期属于Date
数据类型,但工作表不具有该数据类型。相反,该数据类型是一个格式设置为类似日期的数字。如果您可以确定工作表上日期的格式,一种解决方案是搜索对应的字符串。根据您的示例,可以执行以下操作:
但是由于在许多情况下用户可以改变格式,所以它不是非常健壮。
另一种更可靠的方法是循环遍历现有单元格,查找日期的数字表示形式(使用
Value2
属性):如果要搜索的范围很大,则可以通过将范围读入VBA数组并循环遍历该数组来将搜索速度提高10倍。
zujrkrfu2#
@KOstvall,,我想建议这个简单的查找方法,因为你正在尝试获得日期.
设置rng =工作表1.范围(“A:A”).查找(“2017年1月1日”,查找范围:= xl值,查找位置:= xl整个)
vnjpjtjt3#
在使用
.find
作为日期时也遇到了同样的问题。即使搜索的目标日期格式是dd-mmm
,也要使用d-mmm
的.find。PS:如果目标日期格式是
dd-mm-yy
,你必须循环遍历单元格。在将搜索格式更改为d-mm-yy
/d-m-yy
后,尝试了01-01-20
的上述代码,但未能找到日期,但如果单元格格式更改为01-Jan-20
,它会找到日期。oprakyz74#
要搜索日期,首先要将其保存在一个
String
变量中,并将其格式设置为"Short Date"
,然后通过将其转换为日期来获取Find
变量。这个函数非常通用,但很容易适应任何问题。在标准模块中编写函数及其调用。在
ActiveSheet
中,以您想要的格式(例如25-dic-23)编写日期25/12/2023,然后启动DateFind_Call
调用访问https://www.ozgrid.com/VBA/find-dates.htm了解更多详情。
gg58donl5#
更新:我修改了下面的代码,在find之前设置活动单元格。第二个动画gif显示代码正在运行
一种方法是根据特定的日期格式进行查找,在您的情况下,该格式显示为
"[$-en-US]dd-mmm;@"
。下面是一个简单的示例,您可以根据需要进行调整。要使此示例工作,请将3个日期放入“A1:A3”中,其中只有一个具有所需的格式,然后运行宏。动画gif显示了如何设置格式。