Добрый день Помогите, пож, по ситуации Загоняю диапазон ячеек в массив, конкатенирую и применяю evaluate, выдает ошибку 2015 - из-за запятой, которая отделяет дробную часть от целой. Нашел временный выход - Replace (меняю запятую на точку)... Пока работает, но так как таблиц много и они меняются, в будущем это может не сработать (могут заменяться запятые, которые нужны) Подскажите, пож, как в массив можно загнать диапазон ячеек без запятых, а с точками? Т.е. как получить массив в котором числа находятся с точкой? Пример прилагаю (см. в собщении ниже)
Превращать числовые значения в текст, чтобы потом подсунуть оператору, который преобразует текст в выражение... Зачем?
Код
Sub aaa()
Dim arr_()
Dim dSum As Double
Dim i As Long
With ThisWorkbook.Sheets(1)
arr_ = .Range("a1:a10").Value
For i = 2 To 10
dSum = dSum + arr_(i, 1)
Next i
End With
DeBug.Print dSum
End Sub
Вопрос о двигателе внутреннего сгорания, а пример - "как накачать колесо велосипеда" Покажите нормальный пример. И с вариантом, где запятые должны остаться
В VBA разелитель целой и дробной части - точка. Варианты: - пробежаться по массивам, преобразовать числовые значения в тект с точкой; - перед сцепкой проверять тип значения и заменять запятую в числах; - вычислять условия отдельно. В примере значения и операторы разделены по столбцам. Как для меня - третий вариант самый правильный.
vikttur, спасибо Два первых способа понял, попробую применить. А 3 вариант не совсем... Отдельно, т.е. те где заменять запятую можно - там оставить Replace, а где нельзя - там оставить все как есть - без Replace, сделать в таблице с условиями еще один столбец с меткой, можно менять запятую или нет?
Метод Application.Evaluate (или Range.Evaluate) не учитывает региональных настроек. Соответственно, разделитель дробной части числовых литералов в передаваемой формуле - точка. Можно для преобразования числа в текст использовать функцию Str (следует учитывать, что для неотрицательных чисел она возвращает число с ведущим пробелом, что в формуле не должно помешать).
P.S. В процитированной документации по Evaluate есть неточность - утверждается, что формулы должны задаваться в стиле A1. На самом деле стиль формул должен соответствовать значению свойства Application.ReferenceStyle. По эту тему на сайте есть много замечательных сообщений Алексея (Казанский).
Т.к. в диапазоне с числами присутствует текст, то все равно сначала нужно проверять тип значения, иначе Str(текст) - ошибка. Получается, что перед сцеплением массивы нужно дополнительно обработать - заменить числа на текст с точкой.
Пишите данные для условий текстом - текстовый формат ячеек, вместо запятой писать точку. Если значения получаются в результате работы формул - менять запятую на точку в формулах.