Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/сумма от изменяющегося диапазона в VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
сумма от изменяющегося диапазона в VBA
Гость Дата: Четверг, 22.09.2011, 13:56 | Сообщение № 1
Группа: Гости
Всем день добрый.
Долго думал, решил спросить совета на форуме.
Дело в чем: мне необходимо посчитать значение каждой ячейки в неком заданном диапазоне. Вопрос в том, что при смещении вниз по строкам мне необходимо считать сумму нескольких верхних значений, которые постоянно увеличиваются. Для примера, это примерно такой формулой может выражаться (где i - rows.count):
Е(сумма, от i до n) Range(Cells(iRow - i, iColumn - i), Cells(iRow - i, iColumn + i)), т.е., например, для n-ой строки должно быть такое выражение:
Range(Cells(iRow - 1, iColumn - 1), Cells(iRow - 1, iColumn + 1))+Range(Cells(iRow - 2, iColumn - 2), Cells(iRow - 2, iColumn + 2))+...+Range(Cells(iRow - n, iColumn - n), Cells(iRow - n, iColumn + n)).
Я никак понять не могу, как в VBA эту функцию реализовать.
ПС может, непонятно объяснил, физический смысл в следующем: мне нужно посчитать сумму "воронки", где нижняя точка перевернутого треугольника - это ячейка, в которой должна считаться сумма всех ячеек, входящих в воронку.
 
Ответить
СообщениеВсем день добрый.
Долго думал, решил спросить совета на форуме.
Дело в чем: мне необходимо посчитать значение каждой ячейки в неком заданном диапазоне. Вопрос в том, что при смещении вниз по строкам мне необходимо считать сумму нескольких верхних значений, которые постоянно увеличиваются. Для примера, это примерно такой формулой может выражаться (где i - rows.count):
Е(сумма, от i до n) Range(Cells(iRow - i, iColumn - i), Cells(iRow - i, iColumn + i)), т.е., например, для n-ой строки должно быть такое выражение:
Range(Cells(iRow - 1, iColumn - 1), Cells(iRow - 1, iColumn + 1))+Range(Cells(iRow - 2, iColumn - 2), Cells(iRow - 2, iColumn + 2))+...+Range(Cells(iRow - n, iColumn - n), Cells(iRow - n, iColumn + n)).
Я никак понять не могу, как в VBA эту функцию реализовать.
ПС может, непонятно объяснил, физический смысл в следующем: мне нужно посчитать сумму "воронки", где нижняя точка перевернутого треугольника - это ячейка, в которой должна считаться сумма всех ячеек, входящих в воронку.

Автор - Гость
Дата добавления - 22.09.2011 в 13:56
Michael_S Дата: Четверг, 22.09.2011, 14:19 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Мне кажется, с примером было б понятнее...
И что такое iColumn ?

зы. что-то мне подсказывает, что Вам надо применить формулу суммы арифметической прогрессии.... впрочем, надо видеть конкретный пример.


Сообщение отредактировал Michael_S - Четверг, 22.09.2011, 14:21
 
Ответить
СообщениеМне кажется, с примером было б понятнее...
И что такое iColumn ?

зы. что-то мне подсказывает, что Вам надо применить формулу суммы арифметической прогрессии.... впрочем, надо видеть конкретный пример.

Автор - Michael_S
Дата добавления - 22.09.2011 в 14:19
Гость Дата: Четверг, 22.09.2011, 14:29 | Сообщение № 3
Группа: Гости
icolumn - переменная для обозначения порядкового номера столбца.
я тут дописал слегка вопрос... и пример корявый сделал, как должно работать, вроде должно помочь.

"... ППС пример не выкладываю, или не знаю, как сделать... написал в VBE следующее (там, где range, там и необходимо, чтобы считало сумму в увеличивающихся рядах):
Sub count()
Dim iRow As Long, iColumn As Long, i As Long
For iRow = 1 To 20
For iColumn = 1 To 40
For i = 0 To iRow - 1
Worksheets("книга1").Cells(iRow + 22, iColumn).Value = _
Range(Cells(iRow - i, iColumn - i), Cells(iRow - i, iColumn + i))
Next i
Next iColumn
Next iRow
End Sub
ПППС приложил файл, там кратко нарисовал, как должен макрос работать.
Если кто может, объясните хотя бы в целом, как это можно реализовать.

ПС я не пойму, а в статусе гостя файлы можно прикреплять? не могу понять как...
ППС ну да, мне нужна арифметическая прогрессия. А как ее выразить, у Вас нет какого-нибудь примера?
 
Ответить
Сообщениеicolumn - переменная для обозначения порядкового номера столбца.
я тут дописал слегка вопрос... и пример корявый сделал, как должно работать, вроде должно помочь.

"... ППС пример не выкладываю, или не знаю, как сделать... написал в VBE следующее (там, где range, там и необходимо, чтобы считало сумму в увеличивающихся рядах):
Sub count()
Dim iRow As Long, iColumn As Long, i As Long
For iRow = 1 To 20
For iColumn = 1 To 40
For i = 0 To iRow - 1
Worksheets("книга1").Cells(iRow + 22, iColumn).Value = _
Range(Cells(iRow - i, iColumn - i), Cells(iRow - i, iColumn + i))
Next i
Next iColumn
Next iRow
End Sub
ПППС приложил файл, там кратко нарисовал, как должен макрос работать.
Если кто может, объясните хотя бы в целом, как это можно реализовать.

ПС я не пойму, а в статусе гостя файлы можно прикреплять? не могу понять как...
ППС ну да, мне нужна арифметическая прогрессия. А как ее выразить, у Вас нет какого-нибудь примера?

Автор - Гость
Дата добавления - 22.09.2011 в 14:29
Формуляр Дата: Четверг, 22.09.2011, 15:09 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Описание выглядит довольно запутанным, но если это ариф. прогрессия
x(N) = a + k * N
то, как известно из шк. программы:
S(N) = a * N + k * N * (N+1)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеОписание выглядит довольно запутанным, но если это ариф. прогрессия
x(N) = a + k * N
то, как известно из шк. программы:
S(N) = a * N + k * N * (N+1)

Автор - Формуляр
Дата добавления - 22.09.2011 в 15:09
Michael_S Дата: Четверг, 22.09.2011, 15:33 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Quote (Гость)
ПС я не пойму, а в статусе гостя файлы можно прикреплять? не могу понять как...

Нет, зарегистрируйтесь (пара минут), или через файлообменник (не все имеют к ним доступ с работы)
 
Ответить
Сообщение
Quote (Гость)
ПС я не пойму, а в статусе гостя файлы можно прикреплять? не могу понять как...

Нет, зарегистрируйтесь (пара минут), или через файлообменник (не все имеют к ним доступ с работы)

Автор - Michael_S
Дата добавления - 22.09.2011 в 15:33
Гость Дата: Четверг, 22.09.2011, 15:37 | Сообщение № 6
Группа: Гости
я в интернете нашел, что Sn=(a1+an)/2*n, ну есть и чуть более продвинутая формула... но сути это не меняет. Если бы у меня в каждой ячейке увеличивающейся "воронки" было бы одинаковое значение, вопросов бы не было. Но так как они (значения) разные - это уже не арифметическая прогрессия в ее основном понимании.
Я вот сюда еще вопрос вывесил с примером прикрепленным http://www.programmersforum.ru/showthread.php?t=166266
только там чего-то никто не отвечает... чему я даже не удивляюсь, сам думаю, насколько все вроде просто и в то же время непонятно((
 
Ответить
Сообщениея в интернете нашел, что Sn=(a1+an)/2*n, ну есть и чуть более продвинутая формула... но сути это не меняет. Если бы у меня в каждой ячейке увеличивающейся "воронки" было бы одинаковое значение, вопросов бы не было. Но так как они (значения) разные - это уже не арифметическая прогрессия в ее основном понимании.
Я вот сюда еще вопрос вывесил с примером прикрепленным http://www.programmersforum.ru/showthread.php?t=166266
только там чего-то никто не отвечает... чему я даже не удивляюсь, сам думаю, насколько все вроде просто и в то же время непонятно((

Автор - Гость
Дата добавления - 22.09.2011 в 15:37
Michael_S Дата: Четверг, 22.09.2011, 16:06 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Quote (Гость)
Я вот сюда еще вопрос вывесил с примером прикрепленным http://www.programmersforum.ru/showthread.php?t=166266

Покажите, где и что Вы хотите получить.

зы. У Вас там квадраты номера строки диапазона - это просто пример, или Вам именно это и нужно?


Сообщение отредактировал Michael_S - Четверг, 22.09.2011, 16:09
 
Ответить
Сообщение
Quote (Гость)
Я вот сюда еще вопрос вывесил с примером прикрепленным http://www.programmersforum.ru/showthread.php?t=166266

Покажите, где и что Вы хотите получить.

зы. У Вас там квадраты номера строки диапазона - это просто пример, или Вам именно это и нужно?

Автор - Michael_S
Дата добавления - 22.09.2011 в 16:06
_Жека Дата: Четверг, 22.09.2011, 16:44 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

сделал более расширенный пример.
надеюсь, станет более понятнее...
К сообщению приложен файл: 0879339.xls (27.0 Kb)
 
Ответить
Сообщениесделал более расширенный пример.
надеюсь, станет более понятнее...

Автор - _Жека
Дата добавления - 22.09.2011 в 16:44
_Жека Дата: Четверг, 22.09.2011, 16:51 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

да, квадраты сроки диапазона - это просто частный случай.
 
Ответить
Сообщениеда, квадраты сроки диапазона - это просто частный случай.

Автор - _Жека
Дата добавления - 22.09.2011 в 16:51
nerv Дата: Четверг, 22.09.2011, 17:04 | Сообщение № 10
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

/оно? Почти как СУММ, только еще складывает значения объединенных ячеек.
К сообщению приложен файл: Function_USUM.zip (7.3 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение/оно? Почти как СУММ, только еще складывает значения объединенных ячеек.

Автор - nerv
Дата добавления - 22.09.2011 в 17:04
nerv Дата: Четверг, 22.09.2011, 17:14 | Сообщение № 11
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

видимо, тут надо еще добавить, что число аргументов не ограничено 30, да по идее вообще не ограничено : ) Отличие от СУММ в том, что:
- допускается указывать только ссылки на ячейку/ячейки
- значение типа ИСТИНА ложь не принимаются
- игнорируются числовые аргументы

Впрочем, и то и другое по желанию можно дописать.


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщениевидимо, тут надо еще добавить, что число аргументов не ограничено 30, да по идее вообще не ограничено : ) Отличие от СУММ в том, что:
- допускается указывать только ссылки на ячейку/ячейки
- значение типа ИСТИНА ложь не принимаются
- игнорируются числовые аргументы

Впрочем, и то и другое по желанию можно дописать.

Автор - nerv
Дата добавления - 22.09.2011 в 17:14
nerv Дата: Четверг, 22.09.2011, 17:27 | Сообщение № 12
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

>>только еще складывает значения объединенных ячеек.
Хотя я сейчас попробовал, стандартная функция листа их тоже складывает. А кто-то утверждал обратное... хм...


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение>>только еще складывает значения объединенных ячеек.
Хотя я сейчас попробовал, стандартная функция листа их тоже складывает. А кто-то утверждал обратное... хм...

Автор - nerv
Дата добавления - 22.09.2011 в 17:27
_Жека Дата: Четверг, 22.09.2011, 17:32 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

это, конечно, не то, что мне нужно... читаю, как split работает, мне скорее какая-нибудь функция типа unite подошла бы)
во всяком случае, не представляю, как это можно мне применить.
 
Ответить
Сообщениеэто, конечно, не то, что мне нужно... читаю, как split работает, мне скорее какая-нибудь функция типа unite подошла бы)
во всяком случае, не представляю, как это можно мне применить.

Автор - _Жека
Дата добавления - 22.09.2011 в 17:32
Michael_S Дата: Четверг, 22.09.2011, 18:20 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Quote (_Жека)
это, конечно, не то, что мне нужно... читаю, как split работает, мне скорее какая-нибудь функция типа unite подошла бы)

Quote (Michael_S)
Покажите, где и что Вы хотите получить.

Посчитайте на бумажке и нарисуйте в примере где и какие результаты должны быть.
 
Ответить
Сообщение
Quote (_Жека)
это, конечно, не то, что мне нужно... читаю, как split работает, мне скорее какая-нибудь функция типа unite подошла бы)

Quote (Michael_S)
Покажите, где и что Вы хотите получить.

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

Автор - Michael_S
Дата добавления - 22.09.2011 в 18:20
nerv Дата: Четверг, 22.09.2011, 18:41 | Сообщение № 15
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

\
К сообщению приложен файл: _0879339-1.xls (50.0 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение\

Автор - nerv
Дата добавления - 22.09.2011 в 18:41
_Жека Дата: Четверг, 22.09.2011, 19:36 | Сообщение № 16
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2nerv, спасибо. попытаюсь разобраться, как это работает. В любом случае, это что-то новое для меня.
Единственно, фишка в том, что в рабочем примере количество строк будет очень большим... и через cases их никак не пропишешь.

2Михаил, я же выгрузил пример (сообщение №9), там все есть, первый диапазон ячеек - вводные данные, второй надо получить (это там, где суммы стоят и нули). Nerv вот понял. Я просто более понятнее, чем в примере, объяснить не смогу... ну, если только еще более большой пример сделать.
 
Ответить
Сообщение2nerv, спасибо. попытаюсь разобраться, как это работает. В любом случае, это что-то новое для меня.
Единственно, фишка в том, что в рабочем примере количество строк будет очень большим... и через cases их никак не пропишешь.

2Михаил, я же выгрузил пример (сообщение №9), там все есть, первый диапазон ячеек - вводные данные, второй надо получить (это там, где суммы стоят и нули). Nerv вот понял. Я просто более понятнее, чем в примере, объяснить не смогу... ну, если только еще более большой пример сделать.

Автор - _Жека
Дата добавления - 22.09.2011 в 19:36
Michael_S Дата: Четверг, 22.09.2011, 20:29 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Quote (_Жека)
2Михаил, я же выгрузил пример (сообщение №9), там все есть, первый диапазон ячеек - вводные данные, второй надо получить (это там, где суммы стоят и нули). Nerv вот понял. Я просто более понятнее, чем в примере, объяснить не смогу... ну, если только еще более большой пример сделать.

Понятно. Я просто не догадался ткнуть мышкой в диапазон A6:K9.... счас увидел, что там формулы. Теперь все понятно.

ps Да и еще только счас заметил, что есть еще и пример2.... в общем, пора отдыхать.
 
Ответить
Сообщение
Quote (_Жека)
2Михаил, я же выгрузил пример (сообщение №9), там все есть, первый диапазон ячеек - вводные данные, второй надо получить (это там, где суммы стоят и нули). Nerv вот понял. Я просто более понятнее, чем в примере, объяснить не смогу... ну, если только еще более большой пример сделать.

Понятно. Я просто не догадался ткнуть мышкой в диапазон A6:K9.... счас увидел, что там формулы. Теперь все понятно.

ps Да и еще только счас заметил, что есть еще и пример2.... в общем, пора отдыхать.

Автор - Michael_S
Дата добавления - 22.09.2011 в 20:29
nerv Дата: Четверг, 22.09.2011, 20:41 | Сообщение № 18
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

/вариант универсальнее. По желанию можно дополнить нулями (добавив одну строку)
К сообщению приложен файл: 6182432.xls (49.5 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение/вариант универсальнее. По желанию можно дополнить нулями (добавив одну строку)

Автор - nerv
Дата добавления - 22.09.2011 в 20:41
Формуляр Дата: Пятница, 23.09.2011, 10:45 | Сообщение № 19
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
_Жека,
долго пытался как-то приделать формулу - не вышло.
Пршлось написать UDF.
К сообщению приложен файл: 2851603.xls (51.5 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
Сообщение_Жека,
долго пытался как-то приделать формулу - не вышло.
Пршлось написать UDF.

Автор - Формуляр
Дата добавления - 23.09.2011 в 10:45
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!