powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма диапазона
25 сообщений из 25, страница 1 из 1
Сумма диапазона
    #36823236
Q8ake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, прошу помочь.

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

СМ. пример.
нужна только формула
...
Рейтинг: 0 / 0
Сумма диапазона
    #36823365
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для облегчения - с доп. столбцом
...
Рейтинг: 0 / 0
Сумма диапазона
    #36823483
Q8ake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikttur,

Вариант с доп. столбцом рабочий, спасибо, но мне он не подходит по 2 м причинам:
1. Строка дробиться на 7 параметров, не только по приведенному вами параметру, значит уже надо не 1 столбец, а 7
2. Мне кажется надо приметь формулу =суммпроизв((C7:C14=)*(D7:D14)) но как задать соответствие только по части строчке?
...
Рейтинг: 0 / 0
Сумма диапазона
    #36823724
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверьте (формула массива):
=СУММ(ЕСЛИ(ЕЧИСЛО(НАЙТИ($C18;$C$7:$C$14));D$7:D$14))
Или то же через СУММПРОИЗВ()
...
Рейтинг: 0 / 0
Сумма диапазона
    #36823782
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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))
...
Рейтинг: 0 / 0
Сумма диапазона
    #36823790
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)viktturПроверьте (формула массива):
=СУММ(ЕСЛИ(ЕЧИСЛО(НАЙТИ($C18;$C$7:$C$14));D$7:D$14))
Или то же через СУММПРОИЗВ() =СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14)

Отлично! Я не додумался.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36823974
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы не заморачиваться со сложными формулами, можно использовать vba. В приложенном файле записана процедура, производящая вычисления в вашей таблице при нажатии на кнопку. Код автоматически учитывает, что данная таблица будет продолжаться вправо (добавление новых недель), а также то, что будет расти длина списка компьютеров и списка деталей. Однако код будет нуждаться в модификации, так как начальная строка списка деталей (в приложенном файле это строка 16) будет смещаться вниз по мере роста списка компьютеров. Либо разнесите список компьютеров и список деталей на разные листы, с соответствующей правкой кода.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36824026
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
Sub DetailCalculate()

With Columns( 2 )
For i =  16  To Columns( 1 ).Cells( 16 ).End(xlDown).Row
    DetailName = Cells(i,  1 ).Value
    
    For j =  3  To Rows( 2 ).Cells( 3 ).End(xlToRight).Column

        DetailCount =  0 

        Set m = .Find(DetailName)

        If Not m Is Nothing Then
        iA = m.Address
        Do
        DetailCount = DetailCount + Cells(m.Row, j).Value
        Set m = .FindNext(m)
        Loop While Not m Is Nothing And m.Address <> iA
        End If

        Cells(i, j).Value = DetailCount

    Next j
Next i
End With

End Sub

и добавьте ко второму предложения по возможным модификациям

+ то, что данный код тоже выдаст ошибочные результаты если один код является частью другого ;-)
...
Рейтинг: 0 / 0
Сумма диапазона
    #36824148
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСравните

=СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14)

Настораживает, что в формуле диапазон указан с абсолютной адресацией. То есть, если исходная таблица будет расширена, а это так и будет, то все формулы нужно будет переписывать?
...
Рейтинг: 0 / 0
Сумма диапазона
    #36824239
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)
...
Рейтинг: 0 / 0
Сумма диапазона
    #36827388
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL),


так сравнивать некорректно.

вот так логичнее:

=СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14)

и

=DetailCalculate()


или надо сравнивать коды обеих функций :)
...
Рейтинг: 0 / 0
Сумма диапазона
    #36827603
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_slan_

или надо сравнивать коды обеих функций :)

Там была не функция :) Там была процедура.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36827851
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_KL (XL),


так сравнивать некорректно.

вот так логичнее:

=СУММЕСЛИ($C$7:$C$14;"* "&$C18&" *";D$7:D$14)

и

=DetailCalculate()


или надо сравнивать коды обеих функций :)
Нет, сравнивать надо именно сферу воздействия пользователя, т.е. работу, которую пользователь должен проделать для получения результата (написание, отладка, применение) ;-)
...
Рейтинг: 0 / 0
Сумма диапазона
    #36827898
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формулы и VBA - языки программирования для пользователя

На листе код - формула
В VBA код - процедура

Другое дело, что каждый из них потом использует функции и команды запрограммированные создателем приложения на языках более высокого уровня.

Т.ч. можно еще сравнивать внутренний код СУММЕСЛИ и .Find()
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828182
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну ладно, уговорили :)
Вот пример с пользовательской функцией. Можно протягивать сколь душе угодно.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828535
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aster32,

Вообще-то я никого не уговариваю, а аргументирую свою точку зрения :)
Ваша последняя функция делает разговор о затратах на написание и поддержание бессмысленным, т.к. создает гораздо большую проблему со скоростью пересчета.

На моем компе для 1000 строк в БД полный пересчет (средн. для 5 попыток) занимает:

=СУММЕСЛИ($B$4:$B$1004;"* "&$I9&" *";C$4:C$1004) - 74 мсек

=detailcalc($I3,C$2) - 1334 мсек
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828553
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, почему формула названа летучей?
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828577
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktturПолучается, СУММЕСЛИ определяет D$7 как бесконечный диапазон?

KL, почему формула названа летучей?

1) не бесконечный, а что-то типа [D7].Resize([$C$7:$C$14].Count)

2) в таком написании (начиная с версии 2002XP) формула становится летучей, т.к. не все ячейки влияющие на результат явно отражены в аргументах функции)
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828597
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[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))

это позволит значительно увеличить скорость пересчета.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828608
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, про такую летучесть не знал.
Как не знал и об "интеллекте" СУММЕСЛИ.
Еще один образовательный вопрос - многие ли функции умеют определять недописанное?

По поводу бесконечности не так выразился - имел в ввиду, конечно же, предел, определяемый первым диапазоном.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828693
Фотография Serge 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktturСпасибо, про такую летучесть не знал.
Как не знал и об "интеллекте" СУММЕСЛИ.
Тоже спасибо.
Добавил в закладки.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828783
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)

Вообще-то я никого не уговариваю, а аргументирую свою точку зрения :)


Сдаюсь. На самом деле про такое поведение стандартных функций рабочего листа я тоже не знал. Спасибо.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36828869
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktturЕще один образовательный вопрос - многие ли функции умеют определять недописанное?
За исключением того, что все функции позволяют не писать 0 там, где требуется число или значение ЛОЖЬ [=ЕСЛИ(А1>0;1;)] [=ПОИСКПОЗ(1;{1;2;3};)] [=СУММ(1;;6)], и того, что некоторые функции позволяют опускать аргументы [=ЕСЛИ(А1>0;1)] [=ПОИСКПОЗ(1;{1;2;3})] ... :-)
... так навскидку, ничего похожего не припоминаю. Если припомню, отпишусь.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36829066
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, урок окончен, спасибо.
...
Рейтинг: 0 / 0
Сумма диапазона
    #36829245
kimtan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)
За исключением того, что все функции позволяют не писать 0 там, где требуется число или значение ЛОЖЬ...
Хочу лишь добавить к вышесказанному:
В результате моих экспериментов с некоторыми финансовыми функциями, выяснилось, что фокус с нулем не проходит - ввод обязателен. Эксперименты были давно, потому сейчас с лету и не вспомню, в каких именно... :)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма диапазона
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]