Excel 2007 Transpot - объединение с операторами if - PullRequest
0 голосов
/ 21 мая 2018

Мне нужно выполнить задачу в Excel 2007, и я не могу найти способ!

У меня есть эта таблица:

        A       B         C           D
1    CODE    NUMBER    USERID      CHECKED
2    100     1501        317         OK
3    100     1502        318
4    100     1600        319
5    100     1601        319
6    101     1503        319
7    101     1504        317         OK 
8    101     1120        317
9    102     1505        325
10   102     1506        328
11   102     1807        319
12   102     1808        313         OK
13   102     2012        317

И продолжается ... (У меня естьеще несколько критериев, но я думаю, что могу сделать это один, если знаю правильную функцию)

Итак, мой вывод будет примерно таким:

 |      F     |       G                     |         H
1| (IF A:A =) | (AND IF D:D <> OK) -        | (AND IF D:D <> OK) -    
 |            |    WITHOUT USERID           |    WITH USERID
2|   100      | 1502 - 1600 - 1601          | 1502(317) - 1600(319) - 1601 (319) --and keep going if have more
3|   101      | 1503 - 1120                 | 1503(319) - 1120(317) --and keep going if have more
4|   102      | 1505 - 1506 - 1807 - 2012   | 1505(325) - 1506(328) - 1807(319) - 2012(317) --and keep going if have more

В моей таблице у меня около 120 кодов, 10 ID пользователя и каждый номер уникален.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Если вы используете Excel 2007, вы можете использовать такие вещи, как SUMPRODUCT и IFERROR, но вы не можете использовать AGGREGATE и, конечно, вы не можете использовать TEXTJOIN.

Поэтому я думаю, что маловероятно, что существуетаккуратное решение этого.Я бы сделал что-то вроде этого:

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

=MAX(FREQUENCY(IF((D2:D100<>"OK")*(A2:A100<>""),A2:A100),A2:A100))

Затем, если у вас есть способтабулирования уникальных кодов, вы можете использовать SMALL для извлечения разных чисел для каждого кода, которые не имеют ОК против них, и (поскольку функция сцепления, доступная в Excel 2007, не работает с массивами), объединить их с предыдущим результатом, начиная сH2:

=IFERROR(IF(G2="","",G2&" - ")&SMALL(IF(($D$2:$D$100<>"OK")*($A$2:$A$100=$F2),$B$2:$B$100),COLUMNS($A:A)),G2)

![enter image description here

Идентификатор пользователя можно добавить, начиная с M2

=IFERROR(IF(L2="","",L2&" - ")&SMALL(IF(($D$2:$D$100<>"OK")*($A$2:$A$100=$F2),$B$2:$B$100),COLUMNS($A:A))
&" ("&VLOOKUP(SMALL(IF(($D$2:$D$100<>"OK")*($A$2:$A$100=$F2),$B$2:$B$100),COLUMNS($A:A)),$B$2:$C$100,2,FALSE)&")",L2)

enter image description here

0 голосов
/ 21 мая 2018

Ниже формула массива будет работать для вашей проблемы.Поскольку COL:D критерии идентичны в ваших входных данных, я расположил их по своему желанию;если это обратный путь, вы должны повернуть его вспять.

Запишите формулу для E2, нажмите Ctrl + Shift + Введите и скопируйте ее вниз.Формула будет содержать символы "{" и "}" в начале и в конце.

=IF(D2="OK",CONCAT(IF(A2=A:A, B:B&" - ","")),CONCAT(IF(A2=A:A, B:B&"("&C2&") - ","")))

У вас будет лишний "-" в конце строки;если это проблема, вы можете удалить их, используя функцию LEFT, которая задает параметр длины в виде LEN()-1 строки.

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

У меня естьнашел намного более аккуратное решение, которое не создает "-" в конце.Это снова формула массива (s / b вводится с помощью Ctrl + Shift + Enter ).Единственная возможная проблема заключается в том, что TEXTJOIN - это своего рода новая формула, которую старые версии Excel не поддерживают.

=IF(D2="OK",TEXTJOIN(" - ",TRUE,IF($A$2:$A$13=A2,$B$2:$B$13,"")), TEXTJOIN(" - ",TRUE,IF($A$2:$A$13=A2,$B$2:$B$13 & "("& $C$2:$C$13&")","")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...