Почему это.Метод Find () в Excel VBA, похоже, проверяет только первые 15 символов?

У меня есть список En Excel с идентификаторами и данными (около 8000 строк и более). Идентификаторы могут быть только цифры oder цифры с charaters. Как "2222222222222223" или "222222222222222A" (ячейки с идентификатором отформатированы как текст)

Если я попытаюсь найти адрес записи с идентификатором, он вставит строку 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 строками, где все идентификаторы имели номер"2222222222222222

2 ответов


это, кажется, работает для меня, если я чего-то не хватает, что вполне возможно :)

он возвращает первый адрес, где ячейка совпала и печатает длины строк, которые искали. У меня есть настройка набора данных в 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 23 23


как было отмечено, COUNTIF() будет анализировать значения как числовые, где это возможно, прежде чем сравнивать.

хотя Excel может отображать 30 знаков после запятой, его точность для указанного числа ограничивается 15 значащих цифр, и вычисления могут иметь точность, которая еще меньше из-за трех проблем: округление, усечение и двоичное хранилище.

enter image description here

как вы можете видеть в Примере 16-значные значения, которые могут быть преобразованы в целые числа, сравниваются с их первыми 15 значащими цифрами, поэтому кажется, что в столбце есть 10 вхождений каждого, а строки, имеющие буквы, правильно оцениваются COUNTIF() как уникальный внутри столбца.

Я не мог воспроизвести эту проблему с VBA .Find() но условное форматирование дубликатами показывает то же самое поведение, что и COUNTIF().

подробнее по этому вопросу: https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel