设置搜索工具来匹配在特定数字位置包含 1 的任何单元格

设置搜索工具来匹配在特定数字位置包含 1 的任何单元格

我有一个正在 Excel 中开发的搜索工具。在列“EU”中,我有一些单元格,每个单元格包含一个 124 位数字的字符串。这些字符串由 0 和 1 组成。我有 124 个产生 1 或 0... 的特征,用户可能想要搜索 1、2、3、4、5 等特征。为简单起见,假设 EU1 有字符串 0100100011.....我想找到任何包含 0100100000 或可能包含 0000100010 等的单元格。换句话说,我想找到任何在特定数字位置包含“1”的字符串,可能是在几个数字位置包含几个 1..........例如我想测试这 3 种组合中的任何一种.....

00000100000000010000000000000010010000010000000100000010010000000001001000000000010110010000010000000000000000000000000000000000100 000000000010100010000000100100100100000000100000010010000000010010000000100100000100000100000100000100000100000100000100000100000000000000000000000001000100 000000000000110000010000010001001010000010000010000001001001000000000010010000000001001000010001000010000100000100000000000000000000000001000100

这些位置有 1......

1000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000001000100000000000000000000000000

如果其他位置有 1,那就没问题,但如果测试条件中有 1 而测试位置的该数字中有零,那就不行。


换句话说,使用更容易理解的例子,假设我的字符串只有 5 个字符长,并且我的前 5 个字符串是

EU1       10000
EU2       10001
EU3       11000 
EU4       11011
EU5       00001

我想搜索指定字符位置列表中所有包含1s 的字符串,方法是将每个字符串与包含1我想要的所有位置的变量搜索字符串进行比较1。变量中的零是通配符。另一种说法是,搜索字符串充当掩码。

例如,要查找前两位数字为1s 的字符串(不关心其余数字),我需要指定11000并获取与字符串 EU3 和 EU4 的匹配项。(这可能表示搜索A角和搜索10000(所有对象都是Angular) 应该匹配所有第一个数字为 的字符串1,即 EU1、EU2、EU3 和 EU4。  11100(所有对象都是A角和卢和Circular)应该不会产生匹配,因为没有字符串包含1在第三位数字的位置。相反,00000应该匹配所有字符串,因为全零搜索字符串是通配符。

以表格形式:

搜索字符串:11000 10000 11100 00000
                 ↓↓ ↓ ↓↓↓
欧盟1 10000 →10000 10000 → 10000
欧盟2 10001 →10001 10001 → 10001
欧盟3 →11000 →11000 11000 → 11000
欧盟4 →11011 →11011 11011 → 11011
EU5 00001 00001 00001 → 00001
                                        (无)(全部)

答案1

为简单起见,我将数据放入E第 2 行开始的列中。我将搜索字符串放入单元格中D2。(当然D2,列E必须格式化为文本,或者必须'在每个数字前键入单引号 ( )。)

我选择了使用 Excel 的原生搜索功能。搜索字符串表示11000我们正在寻找第一位数字为1、第二位数字为1、第三至第五个字符为任意值的值。正如您所说,变量(搜索字符串)中的零是通配符。

此通配符的标准表示是11???- 因此我将单元格设置D3

=SUBSTITUTE(D2, "0", "?")

问题没有指定结果应如何呈现。一种方法是,对于 Column 中的每个值E,指示它是否匹配。我们可以通过以下方式做到这一点搜索查找通配符字符串的每个E值。如果找到,SEARCH则返回 1,否则返回错误。因此,我们可以TRUE通过FALSE

=NOT(ISERROR(SEARCH($D$3, E2)))

放入F2,然后向下拖动以覆盖所有E数据。(请注意FIND不允许使用通配符。)

但拥有匹配值的索引列表可能会更方便。我们可以通过使用MATCH搜索列来获取它。我在单元格中输入 1 G1,然后

=MATCH($D$3, INDEX($E$2:$E$99, G1):$E$99, 0) + G1

到单元格中G2(调整99s 以对应最后一个数据行)并向下拖动/填充。这将在列中搜索通配符字符串(位于 中D3E,从上一个匹配点开始。这将返回匹配的数量;例如,“字符串 D”(11011,位于单元格中E5)报告为 5。如果您希望将“字符串 D”报告为 4,这是一个简单的调整。

以下是您所建议的样本数据的结果:

     11000
     10000
     11100
     00000

当然,单元格D3G1可以隐藏。而且,如果您确实需要在第一行开始数据,也可以安排。

PS:我已经用 124 个字符长的值对此进行了测试,答案的两个部分似乎都有效。

答案2

假设我们在列中有数据欧洲联盟欧盟1欧盟100。要查找与模式匹配的单元格,请使用:

Sub Finderr()
   For i = 1 To 100
      v = Cells(i, "EU").Text
      If Mid(v, 1, 1) = "1" And Mid(v, 70, 1) = "1" And Mid(v, 91, 1) = "1" Then
         MsgBox i
      End If
   Next i
End Sub

将输出包含匹配的行。

相关内容