Страницы: 1
RSS
Записанную в ячейке формулу использовать для расчета в массиве
 

Доброго всем времени суток! Подскажите куда копать))

Есть задача…)

В таблице параметры для расчета значений используются разные формулы с использованием переменных. Переменные определяются в начале процедуры и не меняются в процессе. Пользователь назначает значения переменным и записывает формулы для расчета в таблица.  В соседний столбец необходимо вывести результат расчета.    Пример: расчет площади, периметра и объема здания. Размеры определяем в начале процедуру, а формулы берем из столбца (2)      Задумка такая:  Загружаем данные в массив, и производим вычисления используя текст формулы из d(I,2) для расчета значения d(I,3) и далее выгружаем все обратно!Проблема в том что формула записаная в массив воспринимается как текст…

Код
Private Sub Расчет_Параметров()
Dim Dzd, Lzd, Hzd, i, d()
Dzd = Cells(3, 1)
Lzd = Cells(3, 2)
Hzd = Cells(3, 3)
d = Range("A6:C8")
'Задача: использовать тект в d(i,2) как формулу для d(i,3)
For i = 1 To UBound(d)
     d(i, 3) = d(i, 2)          ' а так просто переписывается значение(((
     d(i, 3) = Dzd * Lzd * Hzd 'нужно извлечь вот такую формулу из ячейки _
     причем в разных строках массива разные формулы.
Next i
Range("A6:C8") = d
End Sub
Изменено: Алекс371 - 26.03.2017 20:53:01
 
Может проще?
Я сам - дурнее всякого примера! ...
 
Не, ну если хотца на работе проявить себя кулхацкером, тогда так:
Код
Private Sub Расчет_Параметров()
    Dim Dzd, Lzd, Hzd, i, d()
    Dzd = Cells(3, 1)
    Lzd = Cells(3, 2)
    Hzd = Cells(3, 3)
    d = Range("A6:C8").Formula
    For i = 1 To UBound(d)
        d(i, 3) = Evaluate(d(i, 2))         ' а так просто переписывается значение(((
    Next i
    Range("A6:C8").Formula = d
End Sub

;)
Я сам - дурнее всякого примера! ...
 
Огромное спасибо за ответ!))
Интересное решение использовать для вычислений именованные диапазоны . Получается вместо переменных в теле процедуры мы используем именованный диапазон.... и можем обращатся к именам диапазонов в которых находятся значения переменных...насколько это правильно с точки зрения программирования? я только начинаю изучать VBA может чего не вижу...
  В задаче есть условия: имеем список параметров и формулы для вычисления этих параметров, расчет параметров происходит в массиве и на лист выгружаются значения и в отдельном столбце формулы. В вашем коде на лист выгружаются формулы...а значение дает ошибку?  есть ли возможность перевести  формулу в значение "внутри" процедуры? т.е. имеем в одной ячейке записанную формулу с переменными, а в другой ячейке должны получить значение вычислений...
 
 Хотя все работает при назначении именованных диапазонов и присвоении им значений, это вроде и не переменные но работает...
Получается что для изменения значений переменных нужно менять значение в диапазонах
   
 
так тоже работает
Код
Private Sub Расчет_Парам()
    Dim i, d()
    d = Range("A6:C8")
    For i = 1 To UBound(d)
        d(i, 3) = Evaluate(d(i, 2))  'при условии наличия именнованых диапазонов
    Next i
    Range("A6:C8") = d
End Sub

 
Цитата
Алекс371 написал: решение использовать для вычислений именованные диапазоны
'при условии наличия именнованых диапазонов
В Вашей предыдущей теме (закрыта и удалена) я это решение предложил сразу, и в нем имена ячейкам присваиваются в самом коде.
Чем не устроило?
Согласие есть продукт при полном непротивлении сторон
 
Sanja спасибо за помощь! я успел прочитать Ваше сообщение в той удаленной теме и ваше решение для меня открыло новые возможности в использовании именованных диапазонов. Я пока еще не протестировал его в своем проекте полностью..., ввиду дефицита времени, но в целом должно все получится! еще раз огромное спасибо!))
    Сомнение у меня вызвал сам факт замены переменных в теле процедуры на "имя диапазона". Допустим в ходе выполнения процедуры значение переменной меняется....( т.е. надо переназначить значение именованного диапазона? это тоже можно сделать внутри процедуры? думаю да....) Во всей этой схеме смущает только то, что именованный диапазон на листе особо и не нужен, значение некоторых переменных хочется вводить в TextBox или Список, а некоторые вычисляются внутри процедуры...
    Возможно я немного неправильно формулирую...пока только знакомлюсь VBA, но есть ощущение что делаем лишнюю операцию. Вместо того чтобы присвоить переменной значение и его использовать, мы делаем три хода: Значение ложим в диапазон, обзываем его как переменную и от туда берем значение диапазона...
В этом и был вопрос, использовать переменные в расчете формулы (текст которой записан в ячейке или в элементе управления).
А так все работает ка Вы и подсказали, еще раз спасибо за помощь.
Страницы: 1
Наверх