查找出现子字符串的最小列号(在多行范围内)

时间:2018-11-14 10:46:44

标签: excel excel-formula

我有一个范围$A$1:$C$10,其中的单元格可以为空,也可以包含符合以下格式的文本

  1. string1(仅字符串1)
  2. string1, string2, ...string1在用逗号分隔符分隔的一系列字符串的开头)
  3. stringN, ..., string1, ...string1在序列中间的某处)
  4. ..., string1(序列末尾的string1

此外,我还有一个带有两列“ myTable”和“ String”的表“ firstOccurence”。

在“ string”列中,我有诸如:

string1
string2
string3
...
stringN

在“ firstOccurence”列中,我想在$A$1:$C$10(多行)范围内插入出现字符串的最小列号(参见上述格式)。即如果我在“ string1列中有“ string”并且“ string1”位于单元格B2C6中(无论格式如何),我会希望在“ 2”列中有“ firstOccurrence”(B是第二列)

如何使用Excel(数组)公式实现此目标?

到目前为止,我有以下代码:

=IF([@[String]]<>"";
    IF(
        OR(
            COUNTIF($A$1:$C$10;[@[String]])>0;
            COUNTIF($A$1:$C$10;[@[String]]&", *")>0;
            COUNTIF($A$1:$C$10;"*, "&[@[String]])>0;
            COUNTIF($A$1:$C$10;"*, "&[@[String]]&", *")>0
        );
        ### What should I put here ? ### ;
        ""
    );
    ""
)

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

尝试在myTable的[firstOccurence]列中使用此数组公式。由于它是一个数组公式,因此请用CTRL+shift+enter

进行确认。
=AGGREGATE(15;6;IF(FIND([@[String]];$A$1:$C$10)>0;COLUMN($A$1:$C$10));1)

答案 1 :(得分:1)

如果像我一样尝试不惜一切代价避免使用数组公式,而只需要检查A,B和C列,则可以使用以下公式:

=IF(COUNTIFS(A$1:A$10,"*"&$E2&"*")>0,1,
    IF(COUNTIFS(B$1:B$10,"*"&$E2&"*")>0,2,
        IF(COUNTIFS(C$1:C$10,"*"&$E2&"*")>0,3,0)
    )
)

这将选择String1,即使它是字符串2的子字符串。它也区分大小写。但是,如果需要,可以很容易地更改公式。

以下是显示其正常工作的图像:

enter image description here

如果您想知道,获取列字母的公式为:

=IFERROR(LEFT(ADDRESS(1,$F2,2),FIND("$",ADDRESS(1,$F2,2))-1),"Not Found")

任何后续问题,请告诉我,我会尽力提供帮助。