|
|
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Задача такая, есть лист, в данном случае Лист1, в столбце A указанны счета, в столбце B указанны суммы (в реальной задаче столбцы стоят не рядом). Нужно посчитать сумму по столбцу B привязываясь лишь к значению счетов, где счета соответствуют некоторому набору значений, счетов может быть несколько десятков. Я эту задачу решаю подобными формулами Код: plaintext 1. Можно ли как-то упростить вид формулы и сократить её длину. В идеале бы подошли один из двух вариантов: 1. Во вспомогательной ячейке расположенной справа от основной, разместить список счетов разделенных между собой к примеру запятой, а в основной ячейке написать формулу делающую расчёт на основе списка из вспомогательной ячейки. 2. Используются вспомогательные ячейки в количестве счетов, по которым надо вычислить сумму. К примеру они располагаются справа от основной формулы (т.е. к примеру, если основная формула расположена в ячейке A1 и надо найти сумму соответствующую трём счетам, то список этих счетов должен размещаться в ячейках B1, C1, D1). А основная формула должна как-то ссылаясь на списки счетов во вспомогательных ячейках, считала сумму по этим счетам. При этом желательно, чтобы длина основной формулы особо не зависела от количества счетов и длины имени листов и вписывалась в заданные 255 знаков и была универсальна, в том смысле, чтобы её можно было растянуть вдоль столбца и лишь менять список счетов во вспомогательных ячейках по каждой строке. Возможно есть какие-то другие идеи (вариант с сокращением длины листа с которого идёт расчёт до одного знака не рассматривается, т.к. названия листов менять нельзя, к тому-же всё равно при очень большом количестве счетов часть счетов всё равно не влезет). Файлик для экспериментов в прилагаю: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 11:29 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
=СУММ((СЧЁТЕСЛИ(H4:H10;$A2:$A209)>0)*$B2:$B209) Формула массива, H4:H10 - список нужных счетов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 12:02 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Djon Player, вариант с Dsum ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 12:05 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
vikttur и qwrqwr огромное спасибо, оба решения дают то что нужно и самое приятное, что формулы не ддлинные и визуально все видно, даже не ожидал. Поизучаю справку с БДСУММ, ранее в своей практике ещё не проверял. Вариант с формулой массива ещё повысил мои знания в этой области и способах его применения. Ещё раз всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 12:14 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Поэксперементировал с приведенными формулами для конкретно моего примера, когда список заданных счетов распологается не вдоль столбца, а вдоль строки, оказалось, что формула массива работает, а формула с БДСУММ выдает ошибку #ЗНАЧ, видимо там можно только вертикальный диапазон задавать. А можно как-то указать горизонтальный диапазон, но с помощью какой-то операции его в формуле транспонировать? Это мне уже больше для общего развития, т.к. одна рабочая формула уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 12:29 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Djon Playerформула с БДСУММ выдает ошибку #ЗНАЧ, видимо там можно только вертикальный диапазон задавать. Да Djon PlayerА можно как-то указать горизонтальный диапазон, но с помощью какой-то операции его в формуле транспонировать? Наверное можно только с дополнительным столбцом. Типа того (в C4:C9 теперь формула): (только мне так меньше нравится - так ведь не более 255 номеров счетов задать можно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 12:44 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Мысли вслух: =СУММПРОИЗВ(НЕ(ЕОШ(НАЙТИ($A$1:$A$8;$C$9;1)))*1;$B$1:$B$8), В ячейке C9 например через запятую указывается перечень используемых при подсчете счетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 12:57 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Mitar Мысли вслух: Мне кажется, это может сработать некорректно, если мы ищем список типа "АБС1,ЭЮЯ1", а в исходном столбце будут также присутствовать счета "АБС" и "ЭЮЯ". Впрочем, топикстартеру виднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 13:07 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Объединять в ячейке, чтобы потом разъединять? Сизифы? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 13:27 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
MitarЗдравствуйте! Мысли вслух: =СУММПРОИЗВ(НЕ(ЕОШ(НАЙТИ($A$1:$A$8;$C$9;1)))*1;$B$1:$B$8), В ячейке C9 например через запятую указывается перечень используемых при подсчете счетов.Да, проверил, тоже работает. Кстати когда увидел и разобрался с вариантом vikttur -а, решил реализовать по аналогии формулу для одной ячейки со списком счетов перечисленных через запятую, собирался как раз сделать эта после обеде, а тут пришёл, а вариант уже готовый есть. У меня правда мысль была немного другая, но тоже с использованием НАЙТИ. Если вдруг получиться свой вариант, то тоже напишу. Что касается замечания qwrqwr про "АБС1,ЭЮЯ1", то эту ошибку легко обойти, достаточно использовать некий символ разделитель, который ни при каких обстоятельствах не встречается в названии счета. Например, если использовать в качестве разделителя запятую " , ", то в ячейке со списком счетов должно быть что-то вида " , счет1 , счет2 , счет3 , " и соответственно при поиске искать счет окруженный разделителями, например " , счет1 , ". Это конечно не столь красиво, но главное работает. Конкретно в моей ситуации счетов не более 20-30, поэтому 255 символов точно хватит. А если использовать постолбцовый вариант, то 255 столбцов тем более хватит. А так в принципе в случаях, когда список счетов может быть очень огромным, там конечно уже придётся расписывать их вдоль строк, но к сожалению уже на отдельном листе, что будет не столь наглядно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 13:59 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
qwrqwrDjon Playerформула с БДСУММ выдает ошибку #ЗНАЧ, видимо там можно только вертикальный диапазон задавать. Да Djon PlayerА можно как-то указать горизонтальный диапазон, но с помощью какой-то операции его в формуле транспонировать? Наверное можно только с дополнительным столбцом. Типа того (в C4:C9 теперь формула): (только мне так меньше нравится - так ведь не более 255 номеров счетов задать можно :) Проблемка в то, что мне как раз надо вычислять не одну формулу, а много формул, грубо говоря есть столбец примерно из 15 строк вдоль которого расположены формулы считающие каждая по своему списку счетов и по этой вот причине использовать вертикально расположенные списки счетов не совсем удобно, если только не расположить их диагонально (только то пришла такая мысль в голову). Поэтому надо либо в одну ячейку поместить весь список счетов, либо вдоль строчки. Если-же вертикально размещать, то уже на отдельном листе (можно даже на текущем листе расположить их горизонтаьно, а на другом с помошью ТРАНСП как вы привели пример, вертикально, но это уже не столь удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 14:05 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
viktturОбъединять в ячейке, чтобы потом разъединять? Сизифы? :)Список счетов я формирую вручную, т.е. не копирую ниоткуда, поэтому мне без разницы в отдельные ячейки его заполнять или в одну ячейку, так что тут проблемы нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 14:07 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Djon Player Что касается замечания qwrqwr про "АБС1,ЭЮЯ1", то эту ошибку легко обойти, достаточно использовать некий символ разделитель, который ни при каких обстоятельствах не встречается в названии счета.Нет. Эту ошибку легко обойти, если номера счетов не такие, а эдакие. Возможно для ваших номеров счетов это и не актуально. Я имел ввиду, что этой формулой вы учтете счета не перечисленные в списке , если они являются подстрокой перечисленных . См. рис: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 14:10 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
qwrqwr, Это можно решить так: =СУММПРОИЗВ(НЕ(ЕОШ(НАЙТИ("," & $A$1:$A$8 &","; $C$9;1)))*1;$B$1:$B$8) в ячейке C9 должно быть ,qwe1,asd1, Тогда будет 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 14:24 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Djon Playerqwrqwr, Это можно решить такДа, согласен. Невнимательно прочел Ваше сообщение от 13:59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 15:26 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Вобщем в итоге я использовал формулу Mitar -а, слегка модифицируемую, т.к. проще было переделывать сущестувющий набор формул вида СУММЕСЛИ путем автозамены так, чтобы оставались лишь счета. В итоге у меня получилось примерно так: В ячейке EC15 массив формул: {=СУММПРОИЗВ(НЕ(ЕОШ(НАЙТИ("," & Доходы_ЕПЗИ!$C$9:$C$300 & ","; $ED15;1)))*1;Доходы_ЕПЗИ!$F$9:$F$300)} В ячейке ED15 список счетов: ,И901035,И901036,И901037,И901038,И901040,И901041,И901042,И901043,И901044,И901150, Таких строк у меня 15, сейчас как раз занимаюсь переделкой. Всем спасибо! Другие варианты решения всегда приветствуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 15:35 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Наконец-то закончил переделку дурацкого отчета из-за которого я и создал эту тему. До этого он мне каждый квартал доставлял массу неприятностей, т.к. каждый раз приходилось заново устанавливать формулы, брать из другого отчета за предыдущий период и вставлять в новый шаблон (его каждый раз присылает головная компания и он всё время модифицируется). Потом заниматься сверкой корректности формул в соответствии с полем в котором расписано словами описание расчетов, на это уходило кучу времени и нервов (из-за осознания бесполезности такой работы, всё равно что каждый три месяца с нуля писать одну и ту-же программу). Теперь-же как переделал, проверка соответствия списка счетов тому, что написано в поле описания занимает небольшой время, в среднем 1 минуты на 1 формулу, так что грубо говоря не более 15 минут на все формулы. Зато при этом ещё и польза будет, буду вспоминать каждые 3 месяца про формулы массивов. Огромное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 16:20 |
|
||
|
Модификация формулы с целью сокращения длины и удобства чтения
|
|||
|---|---|---|---|
|
#18+
Т.к. наконец появилось чуть свободного времени, стал разбираться в принципах работы приведенных здесь формул массивов. В результате родил свою формулу для случая, когда список счетов находится в одной ячейке I14, он разделен запятыми в качестве разделителя (без пробелов) и в начале и в конце так-же запятая. Код: plaintext В прикрепленном файле написал все варианты формул написанных в этой теме: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 17:20 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36408118&tid=2178620]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 346ms |

| 0 / 0 |
