首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Excel中的.Find()方法只检查前15个字符?

为什么Excel中的.Find()方法只检查前15个字符?
EN

Stack Overflow用户
提问于 2017-03-16 12:32:19
回答 2查看 406关注 0票数 10

我有一个带有ID和数据的Excel列表(大约8000行或更多)。ID只能是带有字符的数字。类似于"2222222222222223“或"222222222222222A”(带有ID的单元格被格式化为文本)

如果我试图用ID查找条目地址,它将插入一个now行,因为它将找不到它们。这意味着最后我把所有条目都翻了一番。

所以我的问题是,find方法比较了多少个字符?

代码语言:javascript
复制
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";""))

你怎么看,同样的问题也发生在这里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 13:32:09

这似乎对我有用,除非我遗漏了什么,这是完全有可能的:)

它返回单元格匹配的第一个地址,并打印搜索字符串的长度。我在Sheet1中设置了数据集,如图所示,将数字数据存储为文本(我在每个值的开头添加了一个撇号)

代码语言:javascript
复制
 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

票数 1
EN

Stack Overflow用户

发布于 2017-03-16 13:12:49

正如有人指出的,在比较之前,COUNTIF()将尽可能解析数值。

虽然Excel可以显示30位小数位,但它对指定数字的精度仅限于15位重要数字,而且由于三个问题:舍入、截断和二进制存储,计算的精度可能更低。

正如您在该示例中所看到的,可以转换为整数的16位数字的值由它们的前15位有效数字进行比较,因此,似乎列中每一位都出现了10次,而COUNTIF()正确地将具有字母的字符串计算为列中的唯一值。

我无法在VBA .Find()中重现此问题,但复制的条件格式显示了与COUNTIF()相同的行为。

关于这个问题的更多信息:Excel

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42834212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档