Проблемы с функцией обрезки в VBA (Excel изменяет данные после VBAtrim) - PullRequest
0 голосов
/ 22 апреля 2020

У меня проблемы с функцией обрезки Excel. Часто данные, которые я извлекаю, сопровождаются дополнительными пробелами после строки информации, например, «1234566». Я исторически использовал функцию обрезки в VBA, и она, кажется, хорошо справляется с этой задачей, но я наткнулся на проблему, когда дело доходит до ячеек с длинными строками из просто чисел.

Вот код:

Dim C As Range
For Each C In ActiveSheet.UsedRange
    With C
    C.Value = Trim (C)
    End With
Next C

Это работает в большинстве случаев, но, например, если я использую этот код вдоль di git с пробелами справа "12355557899200123", функция обрезки в Excel отображается в Trim, но изменяет значение числа ( не хорошо), обрезав несколько из последних цифр, в этом случае 12355557899200123 стало -> 12355557899200100 и 23 были заменены на 00, что может привести к просчетам позже: ((((((.

Заранее благодарю за ваше помощь и предложения!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Ваша проблема не вызвана самой Trim. Исходное содержимое ячейки - String (иначе в нем не должно быть пробелов). Сам Trim возвращает также строку, но когда вы присваиваете результат ячейке, Excel увидит, что строка содержит только цифры, и автоматически преобразует ее в число. Это число представлено как Double и имеет просто ограниченную точность. Вы получите точно такой же результат, когда введете 12355557899200123 в ячейку вручную.

Единственное, что я могу обдумать, - это сохранить число в виде строки (C.Value = "'" & Trim (C)). Но вы все равно потеряете наименее значимые цифры при выполнении расчетов в Excel. Вам нужно будет выполнить все вычисления в VBA, используя тип данных Decimal, а затем записать результаты в виде строки в ячейки. Чтобы справиться с Decimal, вы должны объявить переменную как Variant и использовать функцию CDec для преобразования значения (например, строки) в десятичное число.

Dim v As Variant
v = CDec(ActiveCell)
v = v * 2
ActiveCell.Offset(0, 1) = "'" & CStr(v)
0 голосов
/ 22 апреля 2020

Excel имеет точность 15 цифр, ограничения см. В здесь ( Прокрутите вниз до «Спецификации и ограничения расчета» ). 12355557899200123 имеет длину 17 цифр, что означает, что вы потеряете последние две цифры, когда поместите это в лист Excel.

...