Динамическое переключение диапазона в SUMIF()

У меня есть формула в Excel, которая выглядит так:

=SUMIFS(SILOADRESERVED,
    SIPDU,
    B8&"*",
    SIPHASE, "A",
    SITYPE, "<>RMT"
)

Проблема в том, что диапазон SIPDU меняется на разных этапах проекта, поэтому я хотел бы заменить его другим диапазоном в зависимости от результата условного условия, как показано ниже. Если интересующая нас фаза в AJ4 меньше фазы переключения для этого элемента, поиск SUMIF должен выполняться в старом диапазоне SIPDU, но если фаза уже произошла, поиск SUMIF должен выполняться в новом диапазоне. , SI_NEW_PDU. Эти именованные диапазоны представляют собой соседние столбцы одинаковой длины.

=SUMIFS(SILOADRESERVED,
    IF($AJ$4<MD_Main_Changeover_Phase, SIPDU, SI_NEW_PDU),
    B8&"*",
    SIPHASE, "A",
    SITYPE, "<>RMT"
)

Однако я получаю сообщение об ошибке SPILL и не знаю, что делать. Я использую Office 365.

Некоторые другие подходы, которые я пробовал, не сработали:

=SUMIFS(SILOADRESERVED, INDEX((SIPDU, SI_NEW_PDU), MATCH($AJ$4<MD_Main_Changeover_Phase, {TRUE, FALSE}, 0)), B8&"*", SIPHASE, "A", SITYPE, "<>RMT")

=SUMIFS(SILOADRESERVED, CHOOSE(($AJ$4<MD_Main_Changeover_Phase)+1, SIPDU, SI_NEW_PDU), B8&"*", SIPHASE, "A", SITYPE, "<>RMT")

Я думаю, проблема в том, что SUMIFS перебирает каждую строку, но $AJ$4<MD_Main_Changeover_Phase вложен внутри IF, поэтому MD_Main_Changeover_Phase не перебирает одновременно. Я не уверен, как это обойти.

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

Обновлено: Вот более простой пример того, чего я пытаюсь достичь с нужными мне результатами справа. Вы можете вручную настроить текущую фазу, чтобы обновить SUMIFS ниже.

Вот те же данные в копируемом формате CSV, который могут использовать другие:

Идентификатор оборудования Нагрузка Старый PDU Новый PDU Этап переключения устройства 1 5 А Д 1 2 5 А Э 1 3 10 Б Ф 2 4 10 Б Ф 3 5 20 С ЧАС 4
Текущая фаза 2 Нагрузка на PDU A 0 Нагрузка на PDU B 10 Нагрузка на PDU C 20 Нагрузка на PDU D 5 Нагрузка на PDU E 5 Нагрузка на PDU F 10

MD_Main_Changeover_Phase это одна ячейка или диапазон?

Scott Craner 21.06.2024 22:28

@ScottCraner, это также диапазон, поскольку каждый электрический ряд имеет источник, который будет меняться на разных этапах.

mybluesock 21.06.2024 23:06

Пожалуйста, опубликуйте несколько примеров копируемых данных, чтобы их можно было скопировать и предложить вам решение. Также попытайтесь показать ожидаемый результат. Решение поможет вам указать, что вам нужно сделать, оно не обязательно должно быть точным, но поможет понять, что нужно сделать, чтобы получить желаемый результат. Надеюсь, это поможет вам понять актуальность!

Mayukh Bhattacharya 21.06.2024 23:09

Как получить последнее, ведь 0 так не должно быть 10?

Mayukh Bhattacharya 22.06.2024 00:04

@MayukhBhattacharya Так и должно быть, это опечатка, извините!

mybluesock 22.06.2024 00:27

попробуй: =SUM((IF(H$1<E$2:E$6,C$2:C$6,D$2:D$6)=TEXTAFTER(G2," ",-1))*B$2:B$6)

Mayukh Bhattacharya 22.06.2024 00:28
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
6
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот один из способов решения запроса:


=MAP(G2:G7, LAMBDA(α, 
 SUM((IF(H$1<E2:E6,C2:C6,D2:D6)=
 TEXTAFTER(α," ",-1))*B2:B6)))

Можете ли вы изменить это, включив в него дополнительные критерии? Скажем, если бы в столбце F были цвета, а затем мы просто хотели посмотреть нагрузки на PDU от A до F, где цвет синий? И работает ли это с именованными диапазонами?

mybluesock 22.06.2024 00:44

@mybluesock да, должно сработать. Кроме того, это не так уж и важно, просто добавьте ссылку на ячейку для цвета и диапазона для сравнения. Это будет примерно так: =MAP(G2:G7, LAMBDA(α, SUM((IF(H$1<E2:E6,C2:C6,D2:D6)=TEXTAFTER(α," ",-1))*(F2:F6 = "blue")*B2:B6)))

Mayukh Bhattacharya 22.06.2024 00:47

Мне удалось заставить его работать, используя «код» =MAP(G2:G8, LAMBDA(α, SUM((IF(H$1<E2:E6,C2:C6,D2:D6)= TEXTAFTER(α," " ,-1))*B2:B6*(F2:F6 = "Blue")))) 'код', но мне не удалось заставить его работать в исходной таблице. На следующей неделе я буду экспериментировать с этим дальше. Спасибо за помощь!

mybluesock 22.06.2024 01:02

@mybluesock, можете ли вы опубликовать свое Excel (используя ссылку onedrive или Googlesheets), что запрещено (не знаю, что нет жестких правил, но мы не говорим, что из-за открытия иностранных ссылок), однако я все же постараюсь изучить это, если хочешь! Ах, еще одна вещь: использовались именованные диапазоны, и это тоже сработало: =MAP(G2:G7, LAMBDA(α, SUM((IF(H$1<SWITCH_OVER,Old_PDU,New_PDU)=TEXTAFTER(α," ",-1))*(F2:F6 = "blue")*Load)))

Mayukh Bhattacharya 22.06.2024 01:04

Я только что проверил это на себе и, к счастью, так оно и есть. Боюсь, я не могу поделиться этими данными, поскольку они являются собственностью компании, но мне кажется, что я просто допускаю простую ошибку. Я вернусь, если у меня все еще будут проблемы на следующей неделе! Еще раз спасибо!

mybluesock 22.06.2024 01:13

@mybluesock Большое спасибо за то, что поделились отзывом, рад узнать, что это сработало, а также один запрос при публикации запроса с помощью этого Генератора таблиц разметки он прост в использовании, просто скопируйте данные из Excel и вставьте в указанную сеть, сгенерируйте и скопируйте сюда. простой

Mayukh Bhattacharya 22.06.2024 01:16

Сделаю, спасибо! Кроме того, я обнаружил, что ошибка VALUE, с которой я столкнулся, была вызвана моими именованными диапазонами, включая строку заголовка, так что это легко исправить!

mybluesock 24.06.2024 16:04

Есть дополнительная сложность. Это работает: =SUM(LOAD * (PDU = "1A04")), а это нет: =SUM(LOAD * (PDU = "1A*")).

mybluesock 24.06.2024 16:21

@mybluesock, это не сработает. Вы будете XMATCH() или MATCH() или SEARCH() + ISNUMBER() функционировать. -> =SUM(LOAD*(ISNUMBER(SEARCH("1A",PDU))) или =SUM(LOAD*(ISNUMBER(XMATCH("*1A*",PDU,2))))

Mayukh Bhattacharya 24.06.2024 18:06

Думаю, я нашел аналогичный подход с этой формулой: =SUMPRODUCT(SILOADRESERVED, --(ISNUMBER(SEARCH(B8&"*", IF($AJ$4<MD_Main_Changeover_Phase,SIPDU,SI_NEW_PDU)))),--(SI‌​PHASE = "A"),--(SITYPE‌​<>"RMT")) Однако дополнительная сложность будет проявляться в сотнях формул в некоторых аналитических таблицах, поэтому я думаю, что в конце концов я буду опираться на некоторые вспомогательные столбцы в моей исходной таблице. , который будет делать что-то вроде этого: =IF(OR(ISBLANK([@[Main Changeover Phase]]), ISBLANK([@[New PDU]])), [@PDU], IF(DPHASE<[@[Main Changeover Phase]],[@PDU],[@[New PDU]]))

mybluesock 24.06.2024 19:07

@mybluesock, у вас есть образец данных, и можете ли вы поделиться со мной ссылкой на Excel. Я могу посмотреть, вам не нужны вспомогательные столбцы.

Mayukh Bhattacharya 24.06.2024 19:09

Другие вопросы по теме