基于以下示例:
$D$2:$D$6
我想在范围内的句子中查找范围内的单词$A$2:$A$8
,并使用侧栏中的值(此处Tag
)。到目前为止,我正在这样做:
B2 formula
------------------
=IF(NOT(ISERROR(SEARCH($D$2,A2))),$E$2,
IF(NOT(ISERROR(SEARCH($D$3,A2))),$E$3,
IF(NOT(ISERROR(SEARCH($D$4,A2))),$E$4,
IF(NOT(ISERROR(SEARCH($D$5,A2))),$E$5,
IF(NOT(ISERROR(SEARCH($D$6,A2))),$E$6,
"other"
)
)
)
)
)
虽然这可行,但我的公式与我拥有的查找词的数量一样长,而我想使用一个范围使其更清晰且更易于维护(即现在如果我添加查找词,我需要IF
在我的公式中为该词添加一个语句)。
有没有办法用基于范围的公式复制上述解决方案?
答案1
答案2
您需要使用数组公式。在单元格 B2 中,输入:
=IFERROR(OFFSET($E$1,MATCH(1E+37,SEARCH(D$2:D$6,A2),1),0),"other")
并按Ctrl+Shift+Enter将其作为数组公式输入。
它使用SEARCH
函数匹配列表中的每个单词,并找到最后一个小于“大数字”(此处为 1E+37)的单词。如果有多个匹配项,它将找到列表中最远的那个(例如,“一辆红色汽车和一只黑猫”将返回“对象”)。如果没有找到,则位为IFERROR
您提供“其他”。
当然,随着列表变长,您必须扩展它。(Ctrl+Shift+Enter编辑时务必记住这一点!)
答案3
为了解决这个问题,我在标有“更新”的页面上启用宏的按钮上使用了一些 VBA,以便您可以根据需要附加工作表;
Private Sub CommandButton1_Click()
Dim Target, cell As Range
Set Target = Range(Range("A1"), Range("A65536").End(xlUp))
Dim term, tag As String
term = "cat"
tag = "animal"
For Each cell In Target
If InStr(1, cell, term, 1) Then cell.Offset(0, 1).Value = tag
Next cell
term = "dog"
tag = "animal"
For Each cell In Target
If InStr(1, cell, term, 1) Then cell.Offset(0, 1).Value = tag
Next cell
i = "car"
k = "object"
For Each cell In Target
If InStr(1, cell, term, 1) Then cell.Offset(0, 1).Value = tag
Next cell
term = "plane"
tag = "object"
For Each cell In Target
If InStr(1, cell, term, 1) Then cell.Offset(0, 1).Value = tag
Next cell
term = "sister"
tag = "person"
For Each cell In Target
If InStr(1, cell, term, 1) Then cell.Offset(0, 1).Value = tag
Next cell
End Sub
的基本格式;
term= "cat"
tag = "animal"
For Each cell In Target
If InStr(1, cell, i, 1) Then cell.Offset(0, 1).Value = k
Next cell
可以复制并更改术语和标签的变量值,以适应您想要的任何搜索词和标签,而不必存在于工作表中。
还值得注意的是,您的 IF 方程使用双重否定,您可以使用 IF(SEARCH 而不是 IF(NOT(ISERROR( SEARCH。