Как вызвать формулу ТОЧНО из VBA

Я пытаюсь вызвать 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))

Есть ли у кого-нибудь предложения? Спасибо за вашу помощь.


51
3

Ответы:

Решено

Поскольку 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, чтобы обеспечить сравнение с учетом регистра)