gpt4 book ai didi

vba - Range.Find 在作为公式的日期上

转载 作者:行者123 更新时间:2023-12-04 01:43:04 31 4
gpt4 key购买 nike

我收到一份工作簿,其中包含有关调用中心团队处理量的信息。我无法修改上游工作簿的格式或布局。
一张表包含有关处理错误的信息。
screenshot
(团队成员的用户 ID 已编辑)
每个日期由合并的 1x3 范围表示,相关日期格式为“dd-mmm”,例如“01-6月”
该日期是通过公式从具有相同布局的另一张表中提取的。此类范围的公式为:='QA Scores'!K2:M2我尝试使用 Range.Find定位给定月份的第一天和同一个月的结束日期(基于用户输入) - 例如6 月 1 日至 6 月 15 日。

Set rngMin = .Find(What:=DateValue(minDate), _
LookIn:=xlFormulas, _
LookAt:=xlWhole)
在其他用途​​中,我以这种方式定位了日期,但来自公式的值的附加复杂性似乎是这里的问题。
更新:
我根据 Ron Rosenfeld 的回答写了以下内容:
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

最佳答案

使用 Range.Find 很难找到日期方法。问题之一是在 VBA 中,日期是 Date数据类型,但工作表没有该数据类型。相反,数据类型是格式化为日期的数字。

如果您可以确定工作表上日期的格式,一种解决方案是搜索等效的字符串。鉴于你的例子,这样的事情会起作用:

Option Explicit
Sub GetDates()
Const findDate As Date = #5/11/2017#
Dim findStr As String

Dim R As Range, WS As Worksheet
Set WS = Worksheets("Sheet1")

findStr = Format(findDate, "dd-mmm")

With WS
Set R = .Cells.Find(what:=findStr, LookIn:=xlValues, lookat:=xlWhole)
If Not R Is Nothing Then MsgBox findDate & " found in " & R.Address
End With

End Sub

但它不是很健壮,因为在许多情况下,用户可以更改格式。

另一种更稳健的方法是遍历现有单元格,查找日期的数字表示(使用 Value2 属性):
Sub GetDates2()
Const findDate As Date = #5/11/2017#
Dim R As Range, C As Range, WS As Worksheet

Set WS = Worksheets("sheet1")
Set R = WS.UsedRange

For Each C In R
If C.Value2 = CDbl(findDate) Then MsgBox findDate & " found in " & C.Address
Next C
End Sub

如果要搜索的范围很大,则可以通过将范围读入 VBA 数组并循环遍历该数组来加快十倍的速度。

关于vba - Range.Find 在作为公式的日期上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639660/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com