Чувствительная к регистру формула для выполнения COUNTIF для комбинации цифр и букв - PullRequest
0 голосов
/ 23 февраля 2019

У нас есть идентификаторы длиной от 15 до 18 символов, которые состоят из букв и цифр.

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

Проблема в том, что иногда единственное различие между тем или иным идентификатором заключается в том, является ли регистр одной буквы заглавной или строчной.

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

Очень важно, чтобы один из дублирующих идентификаторов был рыночным с 1, поскольку это является ключом для дальнейших процессов.

Есть либолее простой, но точный способ сделать это с помощью одной формулы?

Упомянутая формула:

=IFERROR(CODE(MID(AL3,1,1))&CODE(MID(AL3,2,1))&CODE(MID(AL3,3,1))&CODE(MID(AL3,4,1))&CODE(MID(AL3,5,1))&CODE(MID(AL3,6,1))&CODE(MID(AL3,7,1))&CODE(MID(AL3,8,1))&CODE(MID(AL3,9,1))&CODE(MID(AL3,10,1))&CODE(MID(AL3,11,1))&CODE(MID(AL3,12,1))&CODE(MID(AL3,13,1))&CODE(MID(AL3,14,1))&CODE(MID(AL3,15,1))&IFERROR(CODE(MID(AL3,16,1)),""))

Некоторые фиктивные идентификаторы образцов:

003B999992CcVWS
003B999992GdEDo
003B999992D4afI
003B999992CcVWs
003B999992CcVWZ
003B999992D40gR
003B999992D40gR
003B999992CcVWz

Вывод формулы:

484851665757575757506799868783
48485166575757575750711006968111
4848516657575757575068529710273
4848516657575757575067998687115
484851665757575757506799868790
4848516657575757575068524810382
4848516657575757575068524810382
4848516657575757575067998687122

Требуемый вывод можно увидеть в последнем столбце справа:

+---+-----------------+----------------------------------+---------+
| # | Account ID      | Formula ID                       | Countif |
+---+-----------------+----------------------------------+---------+
| 1 | 003B999992CcVWS | 484851665757575757506799868783   | 1       |
+---+-----------------+----------------------------------+---------+
| 2 | 003B999992GdEDo | 48485166575757575750711006968111 | 1       |
+---+-----------------+----------------------------------+---------+
| 3 | 003B999992D4afI | 4848516657575757575068529710273  | 1       |
+---+-----------------+----------------------------------+---------+
| 4 | 003B999992CcVWs | 4848516657575757575067998687115  | 1       |
+---+-----------------+----------------------------------+---------+
| 5 | 003B999992CcVWZ | 484851665757575757506799868790   | 1       |
+---+-----------------+----------------------------------+---------+
| 6 | 003B999992D40gR | 4848516657575757575068524810382  | 1       |
+---+-----------------+----------------------------------+---------+
| 7 | 003B999992D40gR | 4848516657575757575068524810382  | 2       |
+---+-----------------+----------------------------------+---------+
| 8 | 003B999992CcVWz | 4848516657575757575067998687122  | 1       |
+---+-----------------+----------------------------------+---------+

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019
={"#", "Account ID", "Formula ID", "Countif";
 ARRAYFORMULA({ROW(INDIRECT("A1:A"&COUNTA(A21:A))), ARRAY_CONSTRAIN({A21:A,
 IFERROR(CODE(MID(A21:A,  1, 1))&
         CODE(MID(A21:A,  2, 1))&CODE(MID(A21:A,  3, 1))&
         CODE(MID(A21:A,  4, 1))&CODE(MID(A21:A,  5, 1))&
         CODE(MID(A21:A,  6, 1))&CODE(MID(A21:A,  7, 1))&
         CODE(MID(A21:A,  8, 1))&CODE(MID(A21:A,  9, 1))&
         CODE(MID(A21:A, 10, 1))&CODE(MID(A21:A, 11, 1))&
         CODE(MID(A21:A, 12, 1))&CODE(MID(A21:A, 13, 1))&
         CODE(MID(A21:A, 14, 1))&CODE(MID(A21:A, 15, 1))&
 IFERROR(CODE(MID(A21:A, 16, 1)), )),
 IF(LEN(A21:A), MMULT((
 IFERROR(CODE(MID(A21:A,  1, 1))&
         CODE(MID(A21:A,  2, 1))&CODE(MID(A21:A,  3, 1))&
         CODE(MID(A21:A,  4, 1))&CODE(MID(A21:A,  5, 1))&
         CODE(MID(A21:A,  6, 1))&CODE(MID(A21:A,  7, 1))&
         CODE(MID(A21:A,  8, 1))&CODE(MID(A21:A,  9, 1))&
         CODE(MID(A21:A, 10, 1))&CODE(MID(A21:A, 11, 1))&
         CODE(MID(A21:A, 12, 1))&CODE(MID(A21:A, 13, 1))&
         CODE(MID(A21:A, 14, 1))&CODE(MID(A21:A, 15, 1))&
 IFERROR(CODE(MID(A21:A, 16, 1)), )) = TRANSPOSE(
 IFERROR(CODE(MID(A21:A,  1, 1))&
         CODE(MID(A21:A,  2, 1))&CODE(MID(A21:A,  3, 1))&
         CODE(MID(A21:A,  4, 1))&CODE(MID(A21:A,  5, 1))&
         CODE(MID(A21:A,  6, 1))&CODE(MID(A21:A,  7, 1))&
         CODE(MID(A21:A,  8, 1))&CODE(MID(A21:A,  9, 1))&
         CODE(MID(A21:A, 10, 1))&CODE(MID(A21:A, 11, 1))&
         CODE(MID(A21:A, 12, 1))&CODE(MID(A21:A, 13, 1))&
         CODE(MID(A21:A, 14, 1))&CODE(MID(A21:A, 15, 1))&
 IFERROR(CODE(MID(A21:A, 16, 1)), )))) * (ROW(A21:A) >= TRANSPOSE(ROW(A21:A))), 
 SIGN(ROW(A21:A))), IFERROR(1/0))}, COUNTA(A21:A), 3)})}

0

0 голосов
/ 23 февраля 2019

Как насчет MMULT?

enter image description here

С учетом регистра COUNTIFS

=ARRAYFORMULA(MMULT(
  N(EXACT(A2:A9,TRANSPOSE(A2:A9))),
  ROW(A2:A9)^0
))

С учетом регистра COUNTIFS с шагом

=ARRAYFORMULA(VLOOKUP(
  {ROW(A2:A9)&A2:A9},
  {
    QUERY({ROW(A2:A9)&A2:A9,A2:A9},"select Col1,Col2 order by Col2 label Col1'',Col2''"),
    TRANSPOSE(SPLIT(TEXTJOIN("|",0,
      IF(TRANSPOSE(ROW(A2:A9)-1)<=QUERY({A2:A9},"select count(Col1) where Col1<>'' group by Col1 label count(Col1)''",),
        TRANSPOSE(ROW(A2:A9)-1),
      )
    ),"|"))
  },
  {3},
))

Пример листа

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