|
|
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Коллеги, прошу помочь. Есть таблица компьютеров и график их поставок по неделям Под таблицей поставок есть таблица компонентов, под каждой неделей надо подсчитать сколько компонентов использовалось в ПК (название ПК содержит компонентную базу). СМ. пример. нужна только формула ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 11:48 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Для облегчения - с доп. столбцом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 12:33 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
vikttur, Вариант с доп. столбцом рабочий, спасибо, но мне он не подходит по 2 м причинам: 1. Строка дробиться на 7 параметров, не только по приведенному вами параметру, значит уже надо не 1 столбец, а 7 2. Мне кажется надо приметь формулу =суммпроизв((C7:C14=)*(D7:D14)) но как задать соответствие только по части строчке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 13:07 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Проверьте (формула массива): =СУММ(ЕСЛИ(ЕЧИСЛО(НАЙТИ($C18;$C$7:$C$14));D$7:D$14)) Или то же через СУММПРОИЗВ() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 14:14 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
viktturПроверьте (формула массива): =СУММ(ЕСЛИ(ЕЧИСЛО(НАЙТИ($C18;$C$7:$C$14));D$7:D$14)) Или то же через СУММПРОИЗВ() При такой формуле, может произойти дублирование, например если есть 5470/512 и 5470/51 Если всегда есть пробел, то надежнее (и быстрее :-)) так: =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14) Если нужно учитывать то, что код может оказаться в конце строки, то тогда так: =CУММ(СУММЕСЛИ($C$7:$C$14;"* "&$C18&{" *";""};D$7:D$14)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 14:31 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
KL (XL)viktturПроверьте (формула массива): =СУММ(ЕСЛИ(ЕЧИСЛО(НАЙТИ($C18;$C$7:$C$14));D$7:D$14)) Или то же через СУММПРОИЗВ() =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14) Отлично! Я не додумался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 14:34 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Чтобы не заморачиваться со сложными формулами, можно использовать vba. В приложенном файле записана процедура, производящая вычисления в вашей таблице при нажатии на кнопку. Код автоматически учитывает, что данная таблица будет продолжаться вправо (добавление новых недель), а также то, что будет расти длина списка компьютеров и списка деталей. Однако код будет нуждаться в модификации, так как начальная строка списка деталей (в приложенном файле это строка 16) будет смещаться вниз по мере роста списка компьютеров. Либо разнесите список компьютеров и список деталей на разные листы, с соответствующей правкой кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 15:19 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Aster32Чтобы не заморачиваться со сложными формулами, можно использовать vba. В приложенном файле записана процедура, производящая вычисления в вашей таблице при нажатии на кнопку. Код автоматически учитывает, что данная таблица будет продолжаться вправо (добавление новых недель), а также то, что будет расти длина списка компьютеров и списка деталей. Однако код будет нуждаться в модификации, так как начальная строка списка деталей (в приложенном файле это строка 16) будет смещаться вниз по мере роста списка компьютеров. Либо разнесите список компьютеров и список деталей на разные листы, с соответствующей правкой кода. И все это для того, чтобы избежать написания формулы состоящей из одной функции и трех параметров :-0 Сравните =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14) и Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. и добавьте ко второму предложения по возможным модификациям + то, что данный код тоже выдаст ошибочные результаты если один код является частью другого ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 15:34 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
авторСравните =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14) Настораживает, что в формуле диапазон указан с абсолютной адресацией. То есть, если исходная таблица будет расширена, а это так и будет, то все формулы нужно будет переписывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 16:03 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Aster32авторСравните =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14) Настораживает, что в формуле диапазон указан с абсолютной адресацией. То есть, если исходная таблица будет расширена, а это так и будет, то все формулы нужно будет переписывать? 1) вы про какой из 3 диапазонов? У них разные векторы зафиксированы. 2) если таблица расширяется путем вставки строк или диапазон помечен как Список (XL2003) или как Таблица (XL2007+), то формула изменяется автоматически 3) ничто не мешает создать динамический именованную формулу: LRow=ПОИСКПОЗ("яяяя";$C:$C) и на листе писать так: =СУММЕСЛИ($C$7:ИНДЕКС($C:$C;LRow);"* "&$C18&" *";D$7:ИНДЕКС($D:$D;LRow)) Можно и еще короче, но формула будет летучей: =СУММЕСЛИ($C$7:ИНДЕКС($C:$C;LRow);"* "&$C18&" *";D$7) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 16:31 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
KL (XL), так сравнивать некорректно. вот так логичнее: =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14) и =DetailCalculate() или надо сравнивать коды обеих функций :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 10:26 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
_slan_ или надо сравнивать коды обеих функций :) Там была не функция :) Там была процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 11:24 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
_slan_KL (XL), так сравнивать некорректно. вот так логичнее: =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14) и =DetailCalculate() или надо сравнивать коды обеих функций :) Нет, сравнивать надо именно сферу воздействия пользователя, т.е. работу, которую пользователь должен проделать для получения результата (написание, отладка, применение) ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 12:44 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Формулы и VBA - языки программирования для пользователя На листе код - формула В VBA код - процедура Другое дело, что каждый из них потом использует функции и команды запрограммированные создателем приложения на языках более высокого уровня. Т.ч. можно еще сравнивать внутренний код СУММЕСЛИ и .Find() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 12:58 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Ну ладно, уговорили :) Вот пример с пользовательской функцией. Можно протягивать сколь душе угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 14:16 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Aster32, Вообще-то я никого не уговариваю, а аргументирую свою точку зрения :) Ваша последняя функция делает разговор о затратах на написание и поддержание бессмысленным, т.к. создает гораздо большую проблему со скоростью пересчета. На моем компе для 1000 строк в БД полный пересчет (средн. для 5 попыток) занимает: =СУММЕСЛИ($B$4:$B$1004;"* "&$I9&" *";C$4:C$1004) - 74 мсек =detailcalc($I3,C$2) - 1334 мсек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 15:37 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
KL (XL)3) ничто не мешает создать динамический именованную формулу: LRow=ПОИСКПОЗ("яяяя";$C:$C) и на листе писать так: =СУММЕСЛИ($C$7:ИНДЕКС($C:$C;LRow);"* "&$C18&" *";D$7:ИНДЕКС($D:$D;LRow)) Можно и еще короче, но формула будет летучей: =СУММЕСЛИ($C$7:ИНДЕКС($C:$C;LRow);"* "&$C18&" *";D$7) Получается, СУММЕСЛИ определяет D$7 как бесконечный диапазон? KL, почему формула названа летучей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 15:41 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
viktturПолучается, СУММЕСЛИ определяет D$7 как бесконечный диапазон? KL, почему формула названа летучей? 1) не бесконечный, а что-то типа [D7].Resize([$C$7:$C$14].Count) 2) в таком написании (начиная с версии 2002XP) формула становится летучей, т.к. не все ячейки влияющие на результат явно отражены в аргументах функции) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 15:50 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
[quot KL (XL)3) ничто не мешает создать динамический именованную формулу: LRow=ПОИСКПОЗ("яяяя";$C:$C) и на листе писать так: =СУММЕСЛИ($C$7:ИНДЕКС($C:$C;LRow);"* "&$C18&" *";D$7:ИНДЕКС($D:$D;LRow)) Можно и еще короче, но формула будет летучей: =СУММЕСЛИ($C$7:ИНДЕКС($C:$C;LRow);"* "&$C18&" *";D$7)[/quot] Кстати, в этом случае, лучше даже вместо имени использовать ячейку с формулой: [A1]=ПОИСКПОЗ("яяяя";$C:$C) и писать на листе: =СУММЕСЛИ($C$7:ИНДЕКС($C:$C;$A$1);"* "&$C18&" *";D$7:ИНДЕКС($D:$D;$A$1)) это позволит значительно увеличить скорость пересчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 15:54 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Спасибо, про такую летучесть не знал. Как не знал и об "интеллекте" СУММЕСЛИ. Еще один образовательный вопрос - многие ли функции умеют определять недописанное? По поводу бесконечности не так выразился - имел в ввиду, конечно же, предел, определяемый первым диапазоном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 15:57 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
viktturСпасибо, про такую летучесть не знал. Как не знал и об "интеллекте" СУММЕСЛИ. Тоже спасибо. Добавил в закладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 16:23 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
KL (XL) Вообще-то я никого не уговариваю, а аргументирую свою точку зрения :) Сдаюсь. На самом деле про такое поведение стандартных функций рабочего листа я тоже не знал. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 16:52 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
viktturЕще один образовательный вопрос - многие ли функции умеют определять недописанное? За исключением того, что все функции позволяют не писать 0 там, где требуется число или значение ЛОЖЬ [=ЕСЛИ(А1>0;1;)] [=ПОИСКПОЗ(1;{1;2;3};)] [=СУММ(1;;6)], и того, что некоторые функции позволяют опускать аргументы [=ЕСЛИ(А1>0;1)] [=ПОИСКПОЗ(1;{1;2;3})] ... :-) ... так навскидку, ничего похожего не припоминаю. Если припомню, отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 17:22 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
Понятно, урок окончен, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 18:45 |
|
||
|
Сумма диапазона
|
|||
|---|---|---|---|
|
#18+
KL (XL) За исключением того, что все функции позволяют не писать 0 там, где требуется число или значение ЛОЖЬ... Хочу лишь добавить к вышесказанному: В результате моих экспериментов с некоторыми финансовыми функциями, выяснилось, что фокус с нулем не проходит - ввод обязателен. Эксперименты были давно, потому сейчас с лету и не вспомню, в каких именно... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 20:47 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36828577&tid=2177715]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 500ms |

| 0 / 0 |
