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 andirow, and we’re inside a loop whereiis looping through 1 to 10so if:
-
you want to reference a different column then just change
4to the proper column index -
you want to reference a different row then just change
ito the proper row index (may be somei+2if you need to iterate through 1 to 10 but start writing from row3)
-
-
the
formulawritten 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
|
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 Макросом я обрабатываю файл и выкладываю в общий доступ уже готовый файл без макросов) |
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- крутая штука. особенно при копировании

