我有一个带有ID和数据的Excel列表(大约8000行或更多)。ID只能是带有字符的数字。类似于"2222222222222223“或"222222222222222A”(带有ID的单元格被格式化为文本)
如果我试图用ID查找条目地址,它将插入一个now行,因为它将找不到它们。这意味着最后我把所有条目都翻了一番。
所以我的问题是,find方法比较了多少个字符?
With objSheet
strAdresseExcel = .Cells.Find(What:=str, After:=.Cells(1, 1), _
LookAt:=Excel.XlLookAt.xlWhole, MatchCase:=True, SearchFormat:=False).Address
End with所以我创建了一个包含8000行的虚拟列表,其中所有的ID都有数字"2222222222222222“,我找到了一些东西。
如果字符串中只有数字,则Excel只比较前15个字符,但如果ID中有一个字母,则我可以正常工作!您可以在下面的图像中看到这个问题
图像信息:
A行:
我处理的是条件格式。
(在Home选项卡上,单击条件格式,突出显示单元格规则,复制值)
只有当ID有数字或前15个字符有差异时才能工作。
B行:
我用的是方程式。(=IF(COUNTIF(A:A;A2)>1;"Double";""))
你怎么看,同样的问题也发生在这里。

发布于 2017-03-16 13:32:09
这似乎对我有用,除非我遗漏了什么,这是完全有可能的:)
它返回单元格匹配的第一个地址,并打印搜索字符串的长度。我在Sheet1中设置了数据集,如图所示,将数字数据存储为文本(我在每个值的开头添加了一个撇号)
Sub testSO()
Dim objSheet As Worksheet: Set objSheet = ThisWorkbook.Sheets("Sheet1")
Dim strToFind As String: strToFind = "22222222222222222222222"
Dim strAddress As String
strAddress = objSheet.Cells.Find(strToFind, objSheet.Cells(1, 1), _
LookAt:=Excel.XlLookAt.xlWhole, MatchCase:=True, SearchFormat:=False).Address
'Print out findings
Debug.Print strAddress, Len(strToFind), Len(objSheet.Range(strAddress))
End Sub产出如下:
$A$5 23 23
发布于 2017-03-16 13:12:49
正如有人指出的,在比较之前,COUNTIF()将尽可能解析数值。
虽然Excel可以显示30位小数位,但它对指定数字的精度仅限于15位重要数字,而且由于三个问题:舍入、截断和二进制存储,计算的精度可能更低。

正如您在该示例中所看到的,可以转换为整数的16位数字的值由它们的前15位有效数字进行比较,因此,似乎列中每一位都出现了10次,而COUNTIF()正确地将具有字母的字符串计算为列中的唯一值。
我无法在VBA .Find()中重现此问题,但复制的条件格式显示了与COUNTIF()相同的行为。
关于这个问题的更多信息:Excel
https://stackoverflow.com/questions/42834212
复制相似问题