Я пытаюсь вызвать Application.WorksheetFunction.Exact. Я сделал поиск, пытаясь найти решение (пока) безрезультатно. Вот что я попытался:
Set deltaCell = ActiveWorkbook.Sheets("qry_invalid_deltas").Range("z4")
Set outCell = deltaCell.Offset(0, -1)
Set inCell = outCell.Offset(0, -1)
debug.print(CDbl(deltaCell.Value) <> CDbl(outCell.Value) - CDbl(inCell.Value))
Debug.Print (Application.WorksheetFunction.exact(deltaCell, outCell - inCell))
Есть ли у кого-нибудь предложения? Спасибо за вашу помощь.
Поскольку Exact не поддерживается функцией WorksheetFunction, используйте оператор равенства для сравнения строк точно так же, как функция Exact:
CStr(deltaCell) = CStr(outCell - inCell)
P.S. Метод сравнения нецелых чисел предполагает допуск сравнения:
Abs(deltaCell - (outCell - inCell)) < tolerance
Используйте метод «Оценить», чтобы использовать функцию «Точная» в VBA;
MsgBox Evaluate("Exact(A1, B1)")
Exact
предназначен для сравнения строк с учетом регистра.
Вы пытаетесь сравнить значения с плавающей запятой. Значит Exact
— это не то, что вам нужно.
Чтобы сравнить значения с плавающей запятой, просто используйте =
.
Однако вы столкнетесь с проблемой точности с плавающей запятой. Решение для вас будет зависеть от деталей того, чего вы пытаетесь достичь. (Обычно подразумевает некоторую терпимость)
(Для тех, кто найдет это и хочет сравнить строки, используйте StrComp
с vbBinaryCompare
, чтобы обеспечить сравнение с учетом регистра)