区分大小写的公式,用于对 ID 的数字字母组合执行 COUNTIF
Case-sensitive formula to perform a COUNTIF for number-letter combination of IDs
我们有 15 到 18 个符号长的 ID,它们是字母和数字的混合。
在常规情况下,我们需要执行 COUNTIF()
以确定唯一 ID 的确切数量。
问题在于,有时一个 ID 与另一个 ID 之间的唯一区别是一个字母的大小写是大写还是小写。
COUNTIF()
不区分大小写,我们需要应用一个非常长的公式,将 ID 转换为单独列中的唯一数字组合,并在另一列中执行 COUNTIF()
。
重要的是其中一个重复的ID是market with 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)),""))
一些虚拟样本 ID:
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 |
+---+-----------------+----------------------------------+---------+
MMULT
怎么样?
区分大小写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},
))
更新 2019-09-26 08:01:56
最终公式为
=ARRAYFORMULA(MMULT(
(ROW(A2:A17)>=TRANSPOSE(ROW(A2:A17))) *
EXACT(A2:A17,TRANSPOSE(A2:A17))^1,
ROW(A2:A17)^0
))
={"#", "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)})}
我们有 15 到 18 个符号长的 ID,它们是字母和数字的混合。
在常规情况下,我们需要执行 COUNTIF()
以确定唯一 ID 的确切数量。
问题在于,有时一个 ID 与另一个 ID 之间的唯一区别是一个字母的大小写是大写还是小写。
COUNTIF()
不区分大小写,我们需要应用一个非常长的公式,将 ID 转换为单独列中的唯一数字组合,并在另一列中执行 COUNTIF()
。
重要的是其中一个重复的ID是market with 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)),""))
一些虚拟样本 ID:
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 |
+---+-----------------+----------------------------------+---------+
MMULT
怎么样?
区分大小写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},
))
更新 2019-09-26 08:01:56
最终公式为
=ARRAYFORMULA(MMULT(
(ROW(A2:A17)>=TRANSPOSE(ROW(A2:A17))) *
EXACT(A2:A17,TRANSPOSE(A2:A17))^1,
ROW(A2:A17)^0
))
={"#", "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)})}