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

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

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

Вариант с доп. столбцом рабочий, спасибо, но мне он не подходит по 2 м причинам:
1. Строка дробиться на 7 параметров, не только по приведенному вами параметру, значит уже надо не 1 столбец, а 7
2. Мне кажется надо приметь формулу =суммпроизв((C7:C14=)*(D7:D14)) но как задать соответствие только по части строчке?
...
Рейтинг: 0 / 0
01.09.2010, 14:14
    #36823724
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма диапазона
Проверьте (формула массива):
=СУММ(ЕСЛИ(ЕЧИСЛО(НАЙТИ($C18;$C$7:$C$14));D$7:D$14))
Или то же через СУММПРОИЗВ()
...
Рейтинг: 0 / 0
01.09.2010, 14:31
    #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
01.09.2010, 14:34
    #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
01.09.2010, 15:19
    #36823974
Aster32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма диапазона
Чтобы не заморачиваться со сложными формулами, можно использовать vba. В приложенном файле записана процедура, производящая вычисления в вашей таблице при нажатии на кнопку. Код автоматически учитывает, что данная таблица будет продолжаться вправо (добавление новых недель), а также то, что будет расти длина списка компьютеров и списка деталей. Однако код будет нуждаться в модификации, так как начальная строка списка деталей (в приложенном файле это строка 16) будет смещаться вниз по мере роста списка компьютеров. Либо разнесите список компьютеров и список деталей на разные листы, с соответствующей правкой кода.
...
Рейтинг: 0 / 0
01.09.2010, 15:34
    #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
01.09.2010, 16:03
    #36824148
Aster32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма диапазона
авторСравните

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

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


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

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

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

и

=DetailCalculate()


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

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

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


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

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

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

и

=DetailCalculate()


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

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

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

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

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

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

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

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

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

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

2) в таком написании (начиная с версии 2002XP) формула становится летучей, т.к. не все ячейки влияющие на результат явно отражены в аргументах функции)
...
Рейтинг: 0 / 0
03.09.2010, 15:54
    #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
03.09.2010, 15:57
    #36828608
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма диапазона
Спасибо, про такую летучесть не знал.
Как не знал и об "интеллекте" СУММЕСЛИ.
Еще один образовательный вопрос - многие ли функции умеют определять недописанное?

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

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


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


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