Excel Чтение данных на основе времени и имени - PullRequest
0 голосов
/ 02 июля 2018

У меня есть лист с информацией о всех проектах и ​​ресурсах. Мне нужно знать, свободен ли ресурс между проектами. Предположим, в команде есть x человек, и мне нужно знать, в течение какого времени кто-то доступен между проектами и когда люди начинают следующий проект.

Пример: Таблица 1: Информация о проекте и ресурс

<table>
  <tr>
    <td>Name</td>
    <td>Project</td>
    <td>Start Date</td>
    <td>End Date</td>
  </tr>
  <tr>
    <td>A</td>
    <td>X</td>
    <td>01 Jan 2019</td>
    <td>31 Mar 2019</td>
  </tr>
  <tr>
    <td>B</td>
    <td>Y</td>
    <td>05 Jan 2019</td>
    <td>01 May 2019</td>
  </tr>
  <tr>
    <td>A</td>
    <td>Z</td>
    <td>15 Apr 2019</td>
    <td>01 Sep 2019</td>
  </tr>
</table>

В вышеприведенном случае у лица А есть два проекта X и Z, а между ними - 15 дней. Я хотел бы таблицу как ниже.

Таблица 2:

<table>
  <tr>
    <td>Name</td>
    <td>Current Project</td>
    <td>End Date</td>
    <td>Next Project</td>
    <td>Start Date</td>
    <td>Duration</td>
  </tr>
  <tr>
    <td>A</td>
    <td>X</td>
    <td>31 Mar 2019</td>
    <td>Z</td>
    <td>15 Apr 2019</td>
    <td>15</td>
  </tr>
  <tr>
    <td>B</td>
    <td>Y</td>
    <td>01 May 2019</td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

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

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Полагаю, нет необходимости получать третий проект. Сначала вы должны получить уникальные имена (столбец A). Это можно сделать как this или с помощью функции unique() в случае Google Sheet. Предполагая, что входной диапазон равен Sheet1!A2:A9, на Sheet2 вы можете получить имя (в данном случае A), введя формулу массива в A2:

{=IFERROR(INDEX(Sheet1!$A$2:$A$9, MATCH(0,COUNTIF($A$1:A1, Sheet1!$A$2:$A$9), 0)),"")}

Теперь добавьте вспомогательный столбец G в Sheet2. В G2 введите приведенную ниже формулу, чтобы получить текущий соответствующий индекс строки для имени (A):

=MATCH($A2, Sheet1!$A$2:$A$9, 0)

Добавить еще один вспомогательный столбец H. Вы можете получить следующий соответствующий индекс строки для имени (A) следующим образом (на H2):

=MATCH($A2, OFFSET(Sheet1!$A$2:$A$9, $G2, 0, 8), 0)+$G2

Обратите внимание, что 8 - это жестко заданная высота Sheet1!$A$2:$A$9. Если диапазон входных значений изменяется, вы также должны изменить значение.

Теперь вы можете получить название текущего проекта, например: (B2):

=INDEX(Sheet1!$B$2:$B$9, $G2)

И название следующего проекта (на D2):

=INDEX(Sheet1!$B$2:$B$9, $H2)

Дата окончания текущего проекта (C2):

=INDEX(Sheet1!$D$2:$D$9, $G2)

Дата начала следующего проекта (E2):

=INDEX(Sheet1!$C$2:$C$9, $H2)

Тогда продолжительность тривиальна (на F2):

=E2-C2

Затем скопируйте 2:2 и вставьте в 3:9. Готово.

enter image description here

Пример файла здесь . Я обернул каждую ячейку ifError() в файле.

0 голосов
/ 02 июля 2018

Я превратил ваши данные в таблицу Excel (с помощью сочетания клавиш Ctrl + T ) и использовал следующие формулы:

enter image description here

E2: =IF(MAX(([Name]=[@Name])*([Start Date]>[@[End Date]])*[Start Date])>0,MAX(([Name]=[@Name])*([Start Date]>[@[End Date]])*[Start Date]),"")

F2: =IF(ISNUMBER([@[Next Project Start Date]]),[@[Next Project Start Date]]-[@[End Date]],"")

Обратите внимание, что формула в E2 является формулой, введенной в массив: ее необходимо ввести в Excel, используя Ctrl + Shift + E

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