在组合中删除辅助列

时间:2018-03-29 15:22:08

标签: arrays excel

我有一个小工具,可以使用二进制模式生成一组项目的所有组合。该工具有效,但现在每个项目都需要一个“帮助”列。 (该工具不需要VBA)

我需要一些帮助来删除“帮助”列。

我将项目放在以 B1 开头的第一行中。在 A2 中,我输入:

=DEC2BIN(ROW()-1,COUNTA($1:$1))

向下复制。 (这使得二进制模式)

我填写“帮助”列(B到E)

=--MID($A2,COLUMNS($A:A),1)

B2 中并向下和向下复制。

最后在 F2 中输入数组公式:

=TEXTJOIN(",",TRUE,IF($B2:$E2=1,$B$1:$E$1,""))

并向下复制:

enter image description here

如您所见,公式非常简单。它会在 B 列中通过 E 查找 1 ,并加入第一行中的相应字词。

我正在尝试使用某种$B2:$E2=1函数替换MID(A2)(这将消除对B,C,D,......列的需要)
我所尝试的是数组公式:

=TEXTJOIN(",",TRUE,IF(MID(A2,ROW(INDIRECT("1:" & LEN(A2))),1)=1,$B$1:$E$1,""))

但这只会产生空白。任何帮助将不胜感激!

修改#1:

如果我使用:

=TEXTJOIN(",",TRUE,IF(MID(A2,ROW(INDIRECT("1:" & LEN(A2))),1)="1",$B$1:$E$1,""))

我得到了一大堆与二进制模式无关的项目。

2 个答案:

答案 0 :(得分:2)

此数组公式(CSE)将消除B:E,并且相对容易扩展以处理更多名称。它假定您具有TEXTJOIN功能(Office 365)

=TEXTJOIN(",",TRUE,IFERROR(INDEX({"Larry";"Moe";"Curly";"Shep"},N(IF(1,N(AGGREGATE(15,6,1/MID(A2,{1,2,3,4},1)*{1,2,3,4},{1,2,3,4}))))),""))

如果允许,您可以使用垂直名称列表替换包含名称的数组常量。

enter image description here

编辑:要使公式更具动态性,请在某些列中输入名称列表,并将其命名为Names,然后您可以使用以下公式:

=TEXTJOIN(",",TRUE,IFERROR(INDEX(Names,
N(IF(1,N(AGGREGATE(15,6,1/MID(A2,ROW(INDIRECT(
"1:"&COUNTA(Names))),1)*ROW(INDIRECT("1:"&COUNTA(
Names))),ROW(INDIRECT("1:"&COUNTA(Names)))))))),""))

当然,您可以将A2公式更改为:

=IFERROR(DEC2BIN(ROW()-1,COUNTA(Names)),"")

并填写,直到你得到空白。

EDIT2:消除A列,并使用名为Names的命名范围:

=TEXTJOIN(",",TRUE,IFERROR(INDEX(Names,N(IF(1,AGGREGATE(
15,6,1/MID(IFERROR(DEC2BIN(ROW()-1,COUNTA(Names)),""),
ROW(INDIRECT("1:"&COUNTA(Names))),1)*ROW(INDIRECT(
"1:"&COUNTA(Names))),ROW(INDIRECT("1:"&COUNTA(Names))))))),""))

答案 1 :(得分:1)

这将手动拾取并返回,必须更改冻结值,但仅限于组合4个单词,A列中的公式会生成基于文本的结果。

ldap_connect("ldaps://server:636");