итоговая сумма в excel

Программирование на Visual Basic for Applications
olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

итоговая сумма в excel

Сообщение olegspb » 12.01.2006 (Чт) 15:13

Подскажите, пожалуйста. Как написать макрос, который будет создавать итоговую сумму в конце таблицы, вне зависимости от ее количества в ней строк.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 12.01.2006 (Чт) 15:18

Опиши задачу поподробнее. Есть подозрение, что никакие макросы здесь не нужны, а хватит либо простой формулы СУММ, либо сводной таблицы.
Быть... или не быть. Вот. В чём вопрос?

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 16:02

Это лишь небольшой кусочек макроса, который я пишу, поэтому нужен именно код, а не формула СУММ. На последнем этапе выполнения макроса получается таблица, в ней три колонки:номер кредитора, наименование кредитора, сумма. В конце колонки "сумма" необходимо получить суммарную цифру всего столбца (итог) и затем отправить на печать. Проблема в том, что количество строк в таблице всегда будет разным, поэтому макрос должен сам определять диапазон суммирования. Вот что у меня получается на данный момент:

Range("c" & numRows).FormulaR1C1 = "=SUM(R[-50]c:R[-1]C)"

Как видно жирным выделен определенный адрес ячейки, а если я пытаюсь вставить в формулу переменную VBA начинает ругаться. Можно ли обойтись без формулы SUM?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 16:09

Данные - Сводная таблица.
Делает всё то же самое, только сама.

Если же хочется быть ССЗБ несмотря ни на что, то
Range("c" & numRows).FormulaR1C1 = "=SUM(" & определённыйадресячейки & ":R[-1]C)"
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 16:43

1. Сводными таблицами пользуюсь, но данный файл я отдаю еще другим работникам (тётечки за 50 лет), и им эти сводные таблицы как китайская грамота.
2.На данную формулу VBA пишет:"Application-defined or object-defined error".

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 16:49

Всю формулу приведи... как она у тебя...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 16:55

Sub сумма()
ActiveCell.CurrentRegion.Select
numRows = selection.Rows.Count
Range("c" & numRows + 1).FormulaR1C1 = "=SUM(&numRows-1&с:R[-1]C)"
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 17:00

Теперь сравни это с тем, что написал я, и найди 10 отличий.

После того, как сделаешь это, обрати также внимание на то, что под "определённыйадресячейки" я имел в виду всё то, что у тебя выделено жирным, а не только номер.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 17:29

Сравнил. Если ты имеешь ввиду, что я пропустил кавычки в: "=SUM(" & определённыйадресячейки & ":R[-1]C), то при их наличии выдается сообщение о синтаксической ошибке.

"=SUM(R[-50]С:R[-1]C)" - означает, что в диапазон суммирования попудут 49 ячеек находящихся выше активной ячейки. Правильно? Вроде да. Но если строк будет 60, 70 или 100. То они не просуммируются, поэтому я хочу чтобы макрос сам определял этот диапазон, для чего и пишу "=SUM(&numRows-1&С:R[-1]C)".
Объясни танкисту в чем я неправ.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 17:35

В том, что если есть число 2, число 3 и подробное описание операции сложения, то получать из них число 5 обычно надо самому...


"=SUM(R[-" & numRows-1 & "]С:R[-1]C)".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

uzer_@
Обычный пользователь
Обычный пользователь
 
Сообщения: 57
Зарегистрирован: 16.08.2005 (Вт) 16:44
Откуда: Санкт-Петербург

Сообщение uzer_@ » 12.01.2006 (Чт) 17:51

если неизвестно заранее количество ячеек возможно как то так
если мышью выделить диапазон смогут
For Each cell In Selection
If cell.Value <> 0 Then 'нужная ячейка = сумма всех ячеек
Next

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 17:53

Пишу:

ActiveCell.CurrentRegion.Select
numRows = selection.Rows.Count
Range("c" & numRows + 1).FormulaR1C1 = "=SUM(R[- & numRows - 1 & ]C:R[-1]C)"

Ответ:
"Application-defined or object-defined error".

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 17:55

Правильно, потому что нефиг кавычки убирать оттуда, где они должны быть...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 18:06

Опечатался я.
Пишу:
ActiveCell.CurrentRegion.Select
numRows = selection.Rows.Count
Range("C" & numRows + 1).FormulaR1C1 = "=SUM(R[- " & numRows - 1 & " ]C:R[-1]C)"
End Sub

Ответ тот же.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 18:15

Правильно, потому что нефиг пробелы ставить там, где их не должно быть. У меня, к примеру, нет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 18:27

1. Копирую формулу из твоего поста
2. Вставляю ее в свой макрос
3. Пробелы появляются автоматически

Стою на освальте в лыжы обутый, или лыжы не едут, или я ...ый :roll:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 18:31

Первая формула твоя.
Вторая моя.
Сравни.

"=SUM(R[- " & numRows - 1 & " ]C:R[-1]C)"
"=SUM(R[-" & numRows - 1 & "]С:R[-1]C)"
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 12.01.2006 (Чт) 18:37

Я же говорю, что пробелы VBA ставит САМ. Если тебе нетрудно, вставь свою формулу в VBA. Если у тебя она будет работать, то я совсем тупой.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 18:43

VBA не может ставить пробелы внутри строковых констант.
Никогда.
И весь код, который я выкладываю, я проверяю.

Применим раскраску.
Возможно, это наведёт на мысли.

Код: Выделить всё
"=SUM(R[- " & numRows - 1 & " ]C:R[-1]C)"
"=SUM(R[-" & numRows - 1 & "]С:R[-1]C)"
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

olegspb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.01.2006 (Чт) 15:04

Сообщение olegspb » 13.01.2006 (Пт) 14:03

Слава Богу за то, что есть люди с таким терпением как у тебя. Всё работает. Спасибо тебе большое.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 102

    TopList