venom51 Пользователь Сообщений: 237 |
#1 24.08.2016 15:20:49 Добрый день,
Как видим по формуле последнюю ячейку которую он захватывает это 23 строка таблицы R[23]C Нашел формулу которая делает аналогичное действие но там промеж.итоги стоят внизу столбца, а мне принципиально надо сверху(((
Прикрепленные файлы
|
||||
vikttur Пользователь Сообщений: 47199 |
Так сработает? |
Badamyan Пользователь Сообщений: 72 |
#3 24.08.2016 15:36:47
Изменено: Badamyan — 24.08.2016 15:37:12 |
||
venom51 Пользователь Сообщений: 237 |
Да сработало) Спасибо) пойду искать как этой переменной нужное значение передать)) |
Badamyan Пользователь Сообщений: 72 |
#5 24.08.2016 15:42:36
переменная = Cells(Rows.Count, 7).End(xlUp).Row |
||
venom51 Пользователь Сообщений: 237 |
#6 24.08.2016 15:44:17
нашел |
||
Kuzmich Пользователь Сообщений: 7998 |
#7 24.08.2016 15:45:08 Зачем вставлять формулу макросом, если макросом можно сумму посчитать?
|
||
venom51 Пользователь Сообщений: 237 |
Kuzmich
чтобы при фильтрации таблицы видеть промежуточные итоги по отфильтрованным данным) зачем бы я тогда вообще использовал промеж.итоги, можно было бы обычную сумму прописать) |
Kuzmich Пользователь Сообщений: 7998 |
#9 24.08.2016 15:51:37
Вы видели, я написал в функции параметр 109 |
||
venom51 Пользователь Сообщений: 237 |
Видел и даже попробовал то что вы написали потестить. Спасибо Badamyan 3 пост в данной теме закрыл вопрос целиком и полностью) Изменено: venom51 — 24.08.2016 16:02:28 |
Badamyan Пользователь Сообщений: 72 |
#11 24.08.2016 16:06:16
а я уж думал что меня некто не видит )))) |
||
Kuzmich Пользователь Сообщений: 7998 |
#12 24.08.2016 16:17:02
В макросе можно установить фильтр и посчитать промежуточную сумму, зачем вставлять формулы |
||
Badamyan Пользователь Сообщений: 72 |
#13 24.08.2016 16:20:57
ну например чтобы каждый раз, если поменять данные, не запускать макрос |
||
Kuzmich Пользователь Сообщений: 7998 |
#14 24.08.2016 16:25:34
Макрос сделать на изменение определенных данных и ничего не надо нажимать, например. |
||
Игорь Гончаренко Пользователь Сообщений: 13746 |
#15 24.08.2016 16:36:33 а почему бы в 7-й колонке не написать:
и перестать на этом париться с макросами, в которых не очень… Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
venom51 Пользователь Сообщений: 237 |
#16 24.08.2016 18:00:00
Потому что я хочу уйти от того чтобы каждый день вставлять формулы в новый файл, а вы меня к этому обратно возвращаете.
Как вариант да, но предполагалось пройтись макросом по файлу всего 1 раз утром и больше не задействовать макросы в таблице. |
||||
Kuzmich Пользователь Сообщений: 7998 |
#17 24.08.2016 18:10:43
Так формулу-то вы вставляете все равно макросом, так что они должны быть разрешены. |
||
venom51 Пользователь Сообщений: 237 |
#18 25.08.2016 10:42:09 Макросом я обрабатываю файл и выкладываю в общий доступ уже готовый файл без макросов) |
Can anyone solve this?
Sub test
Dim i as integer
For I = 1 to 10
ActiveCell.Offset(0, 2).Formula = "=Sum(E15,&i&)"
Next I
End Sub
asked Feb 28, 2017 at 8:08
1
your actual goal is unclear
you may want to start form this code
Sub test()
Dim i As Integer
For i = 1 To 10
cells(i, 4).Formula = "=Sum(E" & i & ":E15)"
Next
End Sub
and adjust it to your needs, knowing that:
-
it currently writes in cells «D1:D10»
since
cells(i, 4)
references a cell in 4th column (i.e.: column «D») 4 andi
row, and we’re inside a loop wherei
is looping through 1 to 10so if:
-
you want to reference a different column then just change
4
to the proper column index -
you want to reference a different row then just change
i
to the proper row index (may be somei+2
if you need to iterate through 1 to 10 but start writing from row3
)
-
-
the
formula
written in those cells is:=SUM(E1:E15)
in D1,=SUM(E2:E15)
in D2,….
=SUM(E10:E15)
in D10.so just change
"=Sum(E" & i & ":E15)"
to your actual needs
answered Feb 28, 2017 at 8:28
user3598756user3598756
28.8k4 gold badges17 silver badges28 bronze badges
2
You’re close, trying to use ampersands (&
) to concatenate strings.
ActiveCell.Offset(0, 2).Formula = "=Sum(E15," & i & ")"
Use the ampersands between strings to merge them, not inside strings.
answered Feb 28, 2017 at 8:11
WolfieWolfie
26.8k7 gold badges26 silver badges54 bronze badges
2
FormulaLocal = = «»=T»&C&»/(O»&C&»*100)»»
-
Явная ошибка — лишний знак «равно».
-
Вторая ошибка — в данном случае двойные кавычки не нужны.
Здесь формула — текст, который при выполнении кода будет преобразован в формулу и записан на лист. Текст — часть кода, заключаемая в кавычки. Кавычки могут присутствовать и внутри текста. Такие кавычки пишутся двойными, чтобы показать, что они не являются гранцами текста:
sStr = "ООО ""Рога и Копыта"" забодало налоговую"
Текст может быть составлен из нескольких фрагментов, каждый из которых заключается в кавычки:
sStr = "ООО " & """Рога и Копыта"" забодало" & " налоговую"
- Оператор дожен быть оператором, а не служебным символом.
Символ & — знак конкатенации, оператор объединения. Если символ не отделить пробелами от сцепляемых фрагментов, редактор будет ругаться — оператор должен быть записан отдельно:
Cells(5, 1).FormulaLocal = "=T" & C & "/(O" & C & "*100)"
Но & — это и служебный символ, обозначающий тип переменной Long. В этом случае переменная и символ типа нераздельны:
Dim i&
i& = Sheets.Count
такая запись тоже правильна:
Cells(5, 1).FormulaLocal = "=T" & C& & "/(O" & C& & "*100)"
-
Не ошибка. FormulaLocal — если требуется записать формулу с функциями локальной версии. Для простых формул достаточно Formula или FormulaR1C1
-
Почти ошибка. С — зарезервированный символ, указатель столбца в ссылках формата R1C1. Нужно избегать применения зарезервированных символов для обозначения переменных, иначе возможны конфликты.
is there a more elegant (simpler) way to put a variable in .formula? I don’t want to use .formulaR1C1
I have this code:
Range("C8").Select
Selection.End(xlDown).Select
PosR = ActiveCell.Row
KonR = PosR - 2
Range("N" & PosR).Select
aAddress = Range("$N$9").Address & ":" & Range("$N$" & KonR).Address
ActiveCell.Formula = "=SUM(" & aAddress & ")"
Obviously I want to put =SUM($N$9:$N$101)
(101 is the last cell minus 2) into that cell and this code does the job. But I just want to be sure that this is the easiest way to do this.
asked Jul 26, 2017 at 8:14
The easiest way is to skip all that selecting and those variables
PosR = Range("C8").End(xlDown).Row
Range("N" & PosR).Formula = "=SUM($N$9:$N$" & PosR - 2 & ")"
Edit: to be more explicit, the easiest way is to use FormulaR1C1
but you said you didn’t want to, so…
answered Jul 26, 2017 at 8:19
RoryRory
32.4k5 gold badges31 silver badges34 bronze badges
3
You can use the code below (without using Select
and ActiveCell
:
PosR = Range("C8").End(xlDown).Row
KonR = PosR - 2
Range("N" & PosR).Formula = "=SUM(" & Range("$N$9").Address & ":" & Range("$N$" & KonR).Address & ")"
Or, the much simplier version:
Range("N" & PosR).Formula = "=SUM($N$9:$N$" & KonR & ")"
answered Jul 26, 2017 at 8:18
Shai RadoShai Rado
32.9k6 gold badges26 silver badges51 bronze badges
Well you should be trying to avoid using Select
in VBA. You’ve made the actual inclusion of a variable in the .Formula
about a simple as it gets, but your whole code could be simplified:
PosR = Range("C8").End(xlDown).Row
Range("N" & PosR).Formula = "=SUM($N$9:$N$" & PosR - 2 & ")"
Really you should be fully qualifying your ranges too, like so
With ThisWorkbook.Sheets("Sheet1")
PosR = .Range("C8").End(xlDown).Row
.Range("N" & PosR).Formula = "=SUM($N$9:$N$" & PosR - 2 & ")"
End With
And if you have blank cells in column C then your use of xlDown
will fail to find the last cell. You may want to look at ways of finding the last cell in VBA or simply use
' Again, preferably fully qualified
Range("C" & Rows.Count).End(xlUp).Row
answered Jul 26, 2017 at 8:21
WolfieWolfie
26.8k7 gold badges26 silver badges54 bronze badges
Range("$N$9").Address
gives exactly "$N$9"
.
Range("N9").Address
gives the same. Thus, it is a bit overwork. Check out the first two debug.print in the sample below.
Thus, once you calculate the last row and assign value to it lngLast
, it is possible to get the formula like this:
"=SUM(N9:N" & lngLast & ")"
Option Explicit
Public Sub TestMe()
Dim strA As String
Dim lngLast As Long
strA = Range("$N$9").Address
Debug.Print strA = "$N$9"
strA = Range("N9").Address
Debug.Print strA = "$N$9"
lngLast = Range("N" & Rows.Count).End(xlUp).Row - 2
ActiveCell.Formula = "=SUM(N9:N" & lngLast & ")"
End Sub
Good morning, everyone
answered Jul 26, 2017 at 8:32
VityataVityata
42.4k8 gold badges55 silver badges98 bronze badges
Сообщение от Step_UA
внутрь ДВССылки
где установить? в VBA? там действительно переменная имеет нужное значение. Но суть в том, чтобы создать формулу, составными частями которой являются амперсанты.
Смысл функции ДВССЫЛ заключается в создании ссылки по тексту в данном случае в стиле R1C1.
У меня в формуле стоит текст
Сообщение от AndreA SN
«»R2C:R»» &
, после которого следует закрывающая текстовую часть кавычка, после нее амперсант объединения значения переменной с текстом, сама переменная, снова амперсант объединения, открывающая кавычка, амперсант текстовый и далее по формуле.
Вся конструкция, описанная здесь, выглядит как
Сообщение от AndreA SN
«»R2C:R»» &» & CStr(_всего) & «& «»C»»
На самом деле лишнего нет ничего. «Лишние амперсанты выполняют разные функции и «принадлежат» разным исполнителям: внешние — EXCEL, внутренние — VBA.
Вообще мы привыкли писать на стиле «A1», поэтому нам тяжко переключаться. Но оказывается R1C1- крутая штука. особенно при копировании
Вставка формулы со ссылками в стиле A1 и R1C1 в ячейку (диапазон) из кода VBA Excel. Свойства Range.FormulaLocal и Range.FormulaR1C1Local.
Свойство Range.FormulaLocal
FormulaLocal — это свойство объекта Range, которое возвращает или задает формулу на языке пользователя, используя ссылки в стиле A1.
В качестве примера будем использовать диапазон A1:E10, заполненный числами, которые необходимо сложить построчно и результат отобразить в столбце F:
Примеры вставки формул суммирования в ячейку F1:
Range(«F1»).FormulaLocal = «=СУММ(A1:E1)» Range(«F1»).FormulaLocal = «=СУММ(A1;B1;C1;D1;E1)» |
Пример вставки формул суммирования со ссылками в стиле A1 в диапазон F1:F10:
Sub Primer1() Dim i As Byte For i = 1 To 10 Range(«F» & i).FormulaLocal = «=СУММ(A» & i & «:E» & i & «)» Next End Sub |
В этой статье я не рассматриваю свойство Range.Formula, но если вы решите его применить для вставки формулы в ячейку, используйте англоязычные функции, а в качестве разделителей аргументов — запятые (,) вместо точек с запятой (;):
Range(«F1»).Formula = «=SUM(A1,B1,C1,D1,E1)» |
После вставки формула автоматически преобразуется в локальную (на языке пользователя).
Свойство Range.FormulaR1C1Local
FormulaR1C1Local — это свойство объекта Range, которое возвращает или задает формулу на языке пользователя, используя ссылки в стиле R1C1.
Формулы со ссылками в стиле R1C1 можно вставлять в ячейки рабочей книги Excel, в которой по умолчанию установлены ссылки в стиле A1. Вставленные ссылки в стиле R1C1 будут автоматически преобразованы в ссылки в стиле A1.
Примеры вставки формул суммирования со ссылками в стиле R1C1 в ячейку F1 (для той же таблицы):
‘Абсолютные ссылки в стиле R1C1: Range(«F1»).FormulaR1C1Local = «=СУММ(R1C1:R1C5)» Range(«F1»).FormulaR1C1Local = «=СУММ(R1C1;R1C2;R1C3;R1C4;R1C5)» ‘Ссылки в стиле R1C1, абсолютные по столбцам и относительные по строкам: Range(«F1»).FormulaR1C1Local = «=СУММ(RC1:RC5)» Range(«F1»).FormulaR1C1Local = «=СУММ(RC1;RC2;RC3;RC4;RC5)» ‘Относительные ссылки в стиле R1C1: Range(«F1»).FormulaR1C1Local = «=СУММ(RC[-5]:RC[-1])» Range(«F2»).FormulaR1C1Local = «=СУММ(RC[-5];RC[-4];RC[-3];RC[-2];RC[-1])» |
Пример вставки формул суммирования со ссылками в стиле R1C1 в диапазон F1:F10:
‘Ссылки в стиле R1C1, абсолютные по столбцам и относительные по строкам: Range(«F1:F10»).FormulaR1C1Local = «=СУММ(RC1:RC5)» ‘Относительные ссылки в стиле R1C1: Range(«F1:F10»).FormulaR1C1Local = «=СУММ(RC[-5]:RC[-1])» |
Так как формулы с относительными ссылками и относительными по строкам ссылками в стиле R1C1 для всех ячеек столбца F одинаковы, их можно вставить сразу, без использования цикла, во весь диапазон.