Почему это.Метод 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 значащих цифр, и вычисления могут иметь точность, которая еще меньше из-за трех проблем: округление, усечение и двоичное хранилище.
как вы можете видеть в Примере 16-значные значения, которые могут быть преобразованы в целые числа, сравниваются с их первыми 15 значащими цифрами, поэтому кажется, что в столбце есть 10 вхождений каждого, а строки, имеющие буквы, правильно оцениваются COUNTIF()
как уникальный внутри столбца.
Я не мог воспроизвести эту проблему с VBA .Find()
но условное форматирование дубликатами показывает то же самое поведение, что и COUNTIF()
.
подробнее по этому вопросу: https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel