Вопрос по суммированию в Эксель
Модератор: Naeel Maqsudov
Здраствуйте. Подскажите пожалуйста.
Уменя есть в ячейке А1 такое значение 850+45-300
В итоге хочу в А1 видна чтобы была видна строка 850+45-300, а в В1 595
Как такое безобразие автоматизировать. Заранее спасиба
Уменя есть в ячейке А1 такое значение 850+45-300
В итоге хочу в А1 видна чтобы была видна строка 850+45-300, а в В1 595
Как такое безобразие автоматизировать. Заранее спасиба
в А1 - оставляете тестовое значение "850+45-300"
Range("B1").Formula = "="+Range("A1").Value
Range("B1").Formula = "="+Range("A1").Value
Можно еще с помощью метода Evaluate, который позволяет по строковому представлению арифметического выражения находить его значение:
Range("B1").Value = Application.Evaluate(Range("A1").Value)
Range("B1").Value = Application.Evaluate(Range("A1").Value)
Пожалуйста извините меня за мою наивность. Обьясните пожалуйста, как применить чтобы посчитался результат? Вот действия которые я сделал:anval писал(а):Можно еще с помощью метода Evaluate, который позволяет по строковому представлению арифметического выражения находить его значение:
Range("B1").Value = Application.Evaluate(Range("A1").Value)
1)Я вписал в редактор ВБ строку
Range("B1").Value = Application.Evaluate(Range("A1").Value)
2)В ячейку А1 пометил строку
850+45-300
3)В ячейку В1 вписал
=А1
Что я неправильно сделал


Заранее огромное спасиба
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
shikin, все правильно, только в ячейку В1 вписывать ничего не нужно.
Нужное Вам значение появится в ячейке после срабатывания процедуры.
т.е. если Вы ожидали автоматический пересчет - этого не будет. И для автоматизации этого дела прийдется применить что-то типа Worksheet_SelectionChange
Нужное Вам значение появится в ячейке после срабатывания процедуры.
Код: Выделить всё
Sub Test()
Range("B1").Value = Application.Evaluate(Range("A1").Value)
End Sub
Ой, класс!! Заработало!! Оно заработало!!! Спасибочки!!! Подскажите пожалуйста, как эту процедуру изменить. у меня в документе около 2-3 листов с такими строками, в которых по две ячейки. Очень громоздкий код будет если я впишу строк 100 таких, для каждой строки.VictorM писал(а):shikin, все правильно, только в ячейку В1 вписывать ничего не нужно.
Нужное Вам значение появится в ячейке после срабатывания процедуры.т.е. если Вы ожидали автоматический пересчет - этого не будет. И для автоматизации этого дела прийдется применить что-то типа Worksheet_SelectionChangeКод: Выделить всё
Sub Test() Range("B1").Value = Application.Evaluate(Range("A1").Value) End Sub
Я вам очень благодарен, вы себе не представляете, как мне упростилась жизнь
Извините за мое настырство.
в модуль
Private Function Frml(b) As String
Frml = Application.Evaluate(Range(b.Address).Value)
End Function
в В1
=Frml(A1)
будет работать везде
Private Function Frml(b) As String
Frml = Application.Evaluate(Range(b.Address).Value)
End Function
в В1
=Frml(A1)
будет работать везде
Только я бы объявила функцию не "String
", а "Single" или "Double"(в случае наличия в формуле операции деления результат может получиться с длинной цепочкой знаков после запятой, если же Frml объявить как плавающее число, то в ячейках с результатом оперативно можно задать нужное число знаков после запятой(Формат-Ячейка-Число-Числовой-...)
", а "Single" или "Double"(в случае наличия в формуле операции деления результат может получиться с длинной цепочкой знаков после запятой, если же Frml объявить как плавающее число, то в ячейках с результатом оперативно можно задать нужное число знаков после запятой(Формат-Ячейка-Число-Числовой-...)
Ура!!! Классик работает. Это самый лучший сайт на всей планете. Работает все как мне хотелось. Даже перещитывает само!!!Dim_ok писал(а):в модуль
Private Function Frml(b) As String
Frml = Application.Evaluate(Range(b.Address).Value)
End Function
в В1
=Frml(A1)
будет работать везде
