Вопрос по суммированию в Эксель

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

shikin
Сообщения: 5
Зарегистрирован: 11 фев 2008, 17:49

Здраствуйте. Подскажите пожалуйста.
Уменя есть в ячейке А1 такое значение 850+45-300
В итоге хочу в А1 видна чтобы была видна строка 850+45-300, а в В1 595
Как такое безобразие автоматизировать. Заранее спасиба
son
Сообщения: 18
Зарегистрирован: 21 янв 2008, 10:17

в А1 - оставляете тестовое значение "850+45-300"
Range("B1").Formula = "="+Range("A1").Value
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Можно еще с помощью метода Evaluate, который позволяет по строковому представлению арифметического выражения находить его значение:
Range("B1").Value = Application.Evaluate(Range("A1").Value)
shikin
Сообщения: 5
Зарегистрирован: 11 фев 2008, 17:49

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

Что я неправильно сделал :( , подскажите пожалуйста(в ВБ я некогда не работал) :confused:
Заранее огромное спасиба
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

shikin, все правильно, только в ячейку В1 вписывать ничего не нужно.
Нужное Вам значение появится в ячейке после срабатывания процедуры.

Код: Выделить всё

Sub Test()
Range("B1").Value = Application.Evaluate(Range("A1").Value)
End Sub
т.е. если Вы ожидали автоматический пересчет - этого не будет. И для автоматизации этого дела прийдется применить что-то типа Worksheet_SelectionChange
shikin
Сообщения: 5
Зарегистрирован: 11 фев 2008, 17:49

VictorM писал(а):shikin, все правильно, только в ячейку В1 вписывать ничего не нужно.
Нужное Вам значение появится в ячейке после срабатывания процедуры.

Код: Выделить всё

Sub Test()
Range("B1").Value = Application.Evaluate(Range("A1").Value)
End Sub
т.е. если Вы ожидали автоматический пересчет - этого не будет. И для автоматизации этого дела прийдется применить что-то типа Worksheet_SelectionChange
Ой, класс!! Заработало!! Оно заработало!!! Спасибочки!!! Подскажите пожалуйста, как эту процедуру изменить. у меня в документе около 2-3 листов с такими строками, в которых по две ячейки. Очень громоздкий код будет если я впишу строк 100 таких, для каждой строки.
Я вам очень благодарен, вы себе не представляете, как мне упростилась жизнь
Извините за мое настырство.
Dim_ok
Сообщения: 51
Зарегистрирован: 03 июл 2007, 09:17

в модуль
Private Function Frml(b) As String
Frml = Application.Evaluate(Range(b.Address).Value)
End Function
в В1
=Frml(A1)
будет работать везде
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Dim_ok, точно! А я чё-то затупил, зациклился сразу на процедуре.:-)
anval
Сообщения: 98
Зарегистрирован: 09 ноя 2004, 10:06

Только я бы объявила функцию не "String
", а "Single" или "Double"(в случае наличия в формуле операции деления результат может получиться с длинной цепочкой знаков после запятой, если же Frml объявить как плавающее число, то в ячейках с результатом оперативно можно задать нужное число знаков после запятой(Формат-Ячейка-Число-Числовой-...)
shikin
Сообщения: 5
Зарегистрирован: 11 фев 2008, 17:49

Dim_ok писал(а):в модуль
Private Function Frml(b) As String
Frml = Application.Evaluate(Range(b.Address).Value)
End Function
в В1
=Frml(A1)
будет работать везде
Ура!!! Классик работает. Это самый лучший сайт на всей планете. Работает все как мне хотелось. Даже перещитывает само!!! :rolleyes: Я уже немножко начал и дружить с редактором ВБ. Респект Вам!
Ответить