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

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

У меня есть отчет о распределении проекта и ресурсов. Мне нужна помощь в создании формулы для отображения сводки в правой части отчета.

Вот характеристики моего отчета:

  • Столбец A со строки 2 по строку 15 представляет собой ресурсы (людей), выделенные для каждого проекта.
  • Столбец B, столбец C.... представляет собой процент ресурсов, выделенных на каждый проект в месяц.
  • Каждый ресурс столбца A объединен в 2 ячейки, поскольку каждый ресурс может работать либо в 1, либо в 2 проектах в месяц.
  • Ресурс, работающий над одним проектом в месяц, будет иметь обе ячейки, объединенные. Ресурс, работающий над 2 проектами, будет иметь 2 строки, представляющие проект
  • Напротив каждого проекта указано число, представляющее процент ресурсов, выделенных на проект.

Вот скриншот моего отчета:

Скриншот листа распределения ресурсов проекта

Здесь, в сводке, я представляю общее количество недель, которое каждый человек потратит на каждый проект. Чтобы упростить расчет, я предполагаю, что каждый месяц эквивалентен ровно 4 неделям. Итак,

  • Если человек А работает на 100% в проекте Б в феврале. Тогда число, которое следует учитывать для подведения итогов, должно быть 4 для проекта Б.
  • Аналогично, если человек А работает 50-50% над 2 проектами в январе. Тогда число, которое следует учитывать для суммирования, должно быть 2-2 недели для каждого проекта

В общем случае число, которое следует рассматривать в обобщенном виде, можно математически представить следующим образом:

4 *[Percentage from column] / 100

Вот чего я пытаюсь добиться:

  1. Прочитать строку из ячеек (F1 - J1)
  2. Выполните поиск в столбце person в двух строках (B2, C2... ) и (B3, C3...), чтобы получить ячейки, начинающиеся со строки project.
  3. Отфильтруйте числа из ячеек выше (из шага 2). Сложите числа, разделите на 100 и умножьте на 4 (чтобы получить количество недель).

Вот что я создал, взяв за основу ответ на аналогичный вопрос изздесь:

=IFERROR((IFERROR(SUM(--((TRIM(RIGHT(SUBSTITUTE(FILTER($B2:$C2,ISNUMBER(SEARCH(J$1,$B2:$C2)))," ",REPT(" ",99)),99))))), 0) + IFERROR(SUM(--((TRIM(RIGHT(SUBSTITUTE(FILTER($B3:$C3,ISNUMBER(SEARCH(J$1,$B3:$C3)))," ",REPT(" ",99)),99))))), 0))*4, "")

что дает мне 6 для проекта B. Есть ли способ упростить это? Я думаю, что я делаю много избыточных операций здесь. Кроме того, он возвращает 0, если проект не найден. Я предпочитаю пустую строку вместо него

Не стесняйтесь предлагать лучшие способы выполнения этого расчета.

Примечание:

  1. Для столбца с двумя объединенными ячейками расчет следует выполнять только один раз для данного человека.
  2. Расчет моего резюме основан на данных из двух строк
  3. Здесь я использую строки имен людей («Person A», «Person B» и т. д.) и названий проектов («Project A», «Project B» и т. д.) просто как текст-заполнитель. В реальном отчете они переходят в реальные значения со случайными алфавитами.

PS: Это похоже на мой предыдущий вопрос, где я создавал сводку по одному столбцу, где две ячейки внутри столбца можно было объединить:Excel — фильтрация строк по начальной строке, считывание чисел из отфильтрованных строк и выполнение арифметических операций для формирования сводки по столбцам.. Однако здесь я выполняю расчет по двум строкам, чтобы получить сводку. И объединенные ячейки строк нужно учитывать только один раз для расчета.

решение1

Может быть, стоит попробовать это более короткое предложение формулы.

1] В F2формуле, скопированной по горизонтали и вертикали:

=SUMPRODUCT(4*TEXT(SUBSTITUTE($B2:$C3,F$1,""),"0%;;;\0")) 

2] Ваш предыдущий вопрос также можно решить с помощью этой же формулы, я поместил ее в A19:C23.

В B19, формула скопирована по горизонтали и по вертикали:

=SUMPRODUCT(0+TEXT(SUBSTITUTE(B$2:B$15,$A19,""),"0%;;;\0"))

И,

Редактировать

Удалить 0

1] Использование формата ячейки:

Все ячейки с формулами форматируются в >> «Учет» >> «Символ», выберите «Нет» >> «Десятичный знак»: нажмите «1»

2] Используя ЕСЛИОШИБКА(1(/1.......),"") добавляем к формуле F2 и получаем >>

=IFERROR(1/(1/SUMPRODUCT(4*TEXT(SUBSTITUTE($B2:$C3,F$1,""),"0%;;;\0"))),"")

введите описание изображения здесь

решение2

Решение более сложное, поскольку диапазон обработки многомерен. (В вашем предыдущем вопросе речь шла только об одном измерении).

Один из способов обработки — превратить его в одномерный массив, что можно сделать с помощью TEXTJOINи FILTERXML. Существует ограничение, заключающееся в том, что строка, полученная в результате TEXTJOINфункции, не может превышать 32,767символов. Если это будет проблемой, то решение VBA или Power Query может быть лучше.

Кроме того, FILTERXMLнедоступно в версиях для Mac и в Excel Online.

Если эти ограничения не применяются, то

F2: =IFERROR(4*SUM(FILTERXML("<t><s>" & SUBSTITUTE(FILTERXML("<t><s>" &TEXTJOIN("</s><s>",TRUE,$B2:$C3) & "</s></t>","//s[starts-with(.,'" & F$1 & "')]")," ","</s><s>") & "</s></t>","//s[last()]")),"")
  • Заполнить справа и снизу

  • Сначала мы создаем XML(используя TEXTJOIN) отдельный узел для каждой ячейки

    • наш xPathаргумент возвращает только те узлы, start-withимя которых указано в строке 1.
    • Затем мы используем SUBSTITUTEдля создания другого узла XMLна основе узлов, разделенных пробелом, с помощью , xPathкоторый возвращает последний узел.
    • Выполните математические действия.

введите описание изображения здесь

РЕДАКТИРОВАТЬ:

Если ты это сделаешьНЕТесть FILTERXMLфункция, попробуйте эту формулу(O365 Mac или Windows и Excel Online)который использует другой метод преобразования двумерного массива в одномерный массив для обработки:

=IFERROR(SUM(4*TRIM(RIGHT(
   SUBSTITUTE(LET(
        seq,IF(SEQUENCE(99)=1,1,(SEQUENCE(99)-1)*99),
        x,TRIM(MID(TEXTJOIN(REPT(" ",99),TRUE,$B2:$C3),seq,99)),
        y, FILTER(x,LEFT(x,LEN(F$1))=F$1),y),
   " ",REPT(" ",99)),99))),"")

Эта формула все еще имеет ограничение в 32 767 символов. Столкнетесь ли вы с этим, будет зависеть в основном от того, сколько пробелов в названии проекта. Формула для вычисления примерно такая:

  • а = среднее количество символов в ячейке

  • b = количество пробелов в ячейке

  • с = количество ячеек

     (a+b*99) * c
    

Если бы у вас были, например, 15символы, 5пробелы и 24ячейки, то это составило бы около 12,000символов.

Связанный контент