解决问题的每种方法有很多,但是需求的组合指出了一种简单明了的方法或VBA解决方案。非VBA解决方案使用助手列。电子表格的布局以及其他因素(例如句子数和可能的结果数,以及您需要和希望如何使用结果)等其他因素均未知。因此,此答案将比特定的解决方案更具通用性。
使用函数,搜索句子中可能有多个目标的过程将很复杂。一种更简单的方法是将句子分解为单词,然后检查单词。解析句子的一种简单方法是使用内置的“将文本转换为列”向导。
假设句子在A列中,则将接下来的几列留空以获取结果。这样,您的结果将始终位于数据旁边可见的已知位置。我假设最多两个,所以列B和C将包含结果值。
计算一个句子中可以包含的最大单词数,并为帮助者列保留许多后续列。这些将用于测试每个单词。假设您允许输入五个字。D:H列将包含分别指向I:M列的公式。
假设第2行是您的第一个数据行,因此第一个公式将在D2中,指向I2。该公式将类似于Gary的学生所建议的内容:
=IF(AND(LEFT(I2,2)="IN",OR(RIGHT(I2,1)="B",RIGHT(I2,1)="1",RIGHT(I2,1)="4",RIGHT(I2,1)="6")),1,0)
替代公式为:
=IFERROR((LEFT(I2,2)="IN")*(SEARCH(RIGHT(I2,1)," 416b")>1),0)
这只是给您一些有关如何判断目标单词是否适合该模式的想法。第二个公式使用SEARCH(因为它不区分大小写)来查看列表中的最后一个字符。测试的前两个字符IN
和最后一个字符,每个结果为True或False,Excel 分别将它们视为1
和0
。所以,如果这两个测试是真实的结果1
,否则0
。
在SEARCH表达式中,我从一个空格开始,然后测试结果> 1。我这样做的原因是因为我使用MS Office Online对其进行了测试,并且它认为在测试字符串的位置1中找到了一个空单元格的最右边字符。
如果SEARCH未找到匹配项,则返回错误,因此将公式包装在IFERROR中可确保任何不匹配的词都在中产生0
。
因此,无论1
单词是否适合您的模式,公式都会返回,或者单词不适合0
(或者目标单元为空)。
在D2中输入任一公式,然后将其拖动或复制到H2,然后向下拖动到所需的最后一行。
要填充目标单元格,请选择A列中的所有数据,然后将其复制并粘贴到I列中(“ Text to Columns”将覆盖数据并从data列开始)。在I列中选择数据。在Data
选项卡上的Data Tools
组中,单击Text to Columns
。您将获得一个不言自明的向导。
告诉它数据已定界,然后选择space
作为定界符。它将为您提供预览,让您预览如何解析单词。完成向导后,它将把每个单词放在该行的连续单元格中。
您在D:H中的公式应1
在每行中至少显示一个。这些是您的单词,它们的列与已解析单词的相对位置相同。
要获得B列中第一个单词的值,请使用INDEX和MATCH 1
在D:H的行中查找第一个单词,并从I:M的同一行中检索相应的值。例如,B2为:
=INDEX(I2:M2,MATCH(1,D2:H2,0))
这将从I2:M2中的单元格中检索到与1
D2:H2中找到精确匹配位置相对应的值。
要获得列C的后续值(如果有两个以上,则要大于此值),有许多解决方案可以找到第N个匹配项1
。这是一种方法的链接。