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

Имеются сложности с написанием макроса, в котором есть формула, внутри которой находятся числитель и знаменатель, являющиеся выделениями.

Поясняю. На листе необходимо выводить в A2 формулу СУММ(C2:C3)/B2, но числитель и знаменатель должны браться из выделения. Написал три макроса:

1. Выделение числителя:
Код
Sub ВыделениеЧислителя()
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Offset(1, 2).Select
Selection.Resize(Selection.Rows.Count - 1, Selection.Columns.Count).Select
End Sub


2. Выделение знаменателя:
Код
Sub ВыделениеЗнаменателя()
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Offset(1, 1).Select
Selection.Resize(Selection.Rows.Count - 1, Selection.Columns.Count).Select
End Sub


3. Вставка формулы в A2:
Код
Sub ВставкаФормулы()
Dim FormulaResult As Worksheet
Set FormulaResult = Excel.ActiveSheet
FormulaResult.Range("A2").Value = "=Sum(C2:C3)/B2"
End Sub


В итоге макрос должен выглядеть так:
Код
Sub ВставкаФормулыВыделения()
Dim FormulaResult As Worksheet
Set FormulaResult = Excel.ActiveSheet
FormulaResult.Range("A2").Value = "Выделение числителя / Выделение знаменателя"
End Sub


Подскажите, пожалуйста, как это сделать? В VBA новичок, но думаю, что для числителя и знаменателя нужно вводить какие-то переменные или что-то еще.
Изменено: andronus - 21.02.2019 13:26:34
 
Добрый день.
Из примера непонятно что за "выделение" такое, откуда надо брать значения числителя и знаменателя? В примере ни куска исходных данных нет, да и макросов самих тоже нет.
Вы не описывайте путь решения (а то вдруг он неправильный, а?), опишите исходные условия и нужный результат простыми русскими буквами, например: Есть список чисел в столбце А. Пользователь должен выделить то-то и сделать се-то и эти числа надо записать сюда/туда/вон там в таком/сяком/разэтоком виде.
Как-то попроще.
Кому решение нужно - тот пример и рисует.
 
Пытливый,
Казалось бы, всё расписал подробно, приложил пример, приложил макросы... Постараюсь объяснить еще раз.
На листе в A2 нужно макросом выводить результат деления диапазонов "Сумма (C2:C3)" на B2:B3. Но! Эти диапазоны заданы в макросе не явно (то бишь, не прописаны их буквенно-цифровые "позывные"), а заданы селектами.
Пользователь ничего не должен делать сам, вместо него это делает макрос, который запустил пользователь.

Как написать такой макрос, который выводит в А2 интересующую формулу?
Код
Sub ВставкаФормулыВыделения()
Dim FormulaResult As Worksheet
Set FormulaResult = Excel.ActiveSheet
FormulaResult.Range("A2").Value = "Выделение числителя / Выделение знаменателя"
End Sub

Где:
Выделение числителя - селект, заданный одноименным макросом (или куском кода в общем макросе)
Выделение знаменателя - селект, заданный одноименным макросом (или куском кода в общем макросе)

В примере диапазоны это всего лишь пример. Они могут быть в разных частях таблицы. То есть, повторюсь, они в формуле прописываются не явно, а заданы селектами.

Так понятнее?
 
Это числители со знаменателями всегда как в файле примере, т.е. напротив ячейки, где будут проводиться вычисления?
И вообще Вы пошли окружным путем... Формулы, выделения...
Изменено: Anchoret - 21.02.2019 14:03:56
 
Цитата
Anchoret написал:
Это числители со знаменателями всегда как в файле примере, т.е. напротив ячейки, где будут проводиться вычисления?
Да. Всегда напротив.
Только в примере диапазоны C2:C3 и B2:B3, а могут быть другие. Но в итоге всегда напротив.

Суть такова, что сначала нужно взять (сохранить куда-то в буфере, например) значение/сумму ячейки/диапазона, а потом из "буфера" вытащить и вставить в формулу.

Формулу-то написать проще простого, но диапазоны всегда разные, явно их не задашь в этом случае.
Изменено: andronus - 21.02.2019 14:07:18
 
Вам тогда надо все объединять в один макрос, где от выделенной ячейки вы определяете адрес ячеек числителя, знаменателя, а потом используете эти адреса в формуле, которую вставляете в заданную ячейку.
Адрес диапазона можно определить, например, так:
Код
[a1].Offset(1, 2).Resize(2, 1).Address
получите значение типа "текст" потом это значение использовать в формуле, например:
Код
[a1].offset(1,0).formulalocal="=СУММ(" & [a1].Offset(1, 2).Resize(2, 1).Address & ")"


Вместо [a1] можно использовать активную ячейку, например (ActiveCell)
Изменено: Пытливый - 21.02.2019 14:08:03
Кому решение нужно - тот пример и рисует.
 
Код
Sub aaa()
Dim a&
a = 2
Do While Len(Cells(a, 1)) > 0
  Cells(a, 1) = (Cells(a, 3) + Cells(a + 1, 3)) / Cells(a, 2)
  a = a + 2
Loop
End Sub
 
Пытливый, написал
Код
[A2].FormulaLocal = "=СУММ(" & [A2].Offset(0, 2).Resize(2, 1).Address & ")"

То что нужно, спасибо! Но далее я не знаю синтаксис, подскажите плиз, как добавить деление в формулу?
Код
[A2].FormulaLocal = "=СУММ(" & [A2].Offset(0, 2).Resize(2, 1).Address & ")" / [A2].Offset(0, 1).Resize(2, 1).Address


Anchoret, не работает, к сожалению. Тем не менее, спасибо за то, что не отказались помочь.
 
Код
[A2].FormulaLocal = "=СУММ(" & [A2].Offset(0, 2).Resize(2, 1).Address & ")/" & [A2].Offset(0, 1).Resize(2, 1).Address
Кому решение нужно - тот пример и рисует.
 
Пытливый, ура, спасибо!
 
удаленo
Изменено: andronus - 21.02.2019 17:03:01
 
удалено
Изменено: andronus - 21.02.2019 17:02:38
 
andronus, у меня на Вашем примере работает. Вывод - пример сильно отличается по структуре от того файла с которым Вы работаете.
Страницы: 1
Наверх