创建"搜索"在MS Excel中运行

时间:2016-10-26 11:29:09

标签: excel search

我在.XLS文档中列出了> 100,000个诊断代码,需要从中提取与多种特定疾病相关的所有代码。

我希望能够做的是在A列中包含所有100,000个诊断代码,在B列中包含诊断标签,然后使用"搜索术语"单元格(例如C1),其中我可以写一个单词,例如" fracture"。

然后我会喜欢所有的诊断代码,包括字符串" fracture"出现在D列中。

在Excel中有一种简单的方法吗?我在网上看起来并没有太大的成功,但这可能是因为我不确定从哪里开始。有条件的格式化没有帮助,因为即使它们被很好地突出显示,它仍然无法管理100,000个代码。

关于我可以尝试搜索的任何初步想法或提示都将非常受欢迎。

示例数据集:

238 Fracture of proximal humerus
202 Aortic stenosis
990 Chronic obstructive pulmonary disease
302 Hip fracture
182 Recurrent fractures
094 Marfan syndrome
298 Diabetic retinopathy

5 个答案:

答案 0 :(得分:2)

我们可以使用帮助列来查找匹配的行。在 E1 中输入:

=MATCH("*" & $C$1 & "*",B:B,0)

并在 E2 中输入:

=IFERROR(MATCH("*" & $C$1 & "*",INDEX(B:B,E1+1):INDEX(B:B,999999),0)+E1,"")

并复制下来。列 E 告诉我们匹配的位置..然后在 D1 中输入:

=IFERROR(INDEX(A:A,E1),"")

并复制下来:

enter image description here

这是进行关键字搜索的一种相当标准的方法。

答案 1 :(得分:0)

假设您要搜索B列中C1中包含的术语。 您可以尝试在A

中使用它
=IF(C1<>"",IFERROR(FIND(C1,B1,1),0),0)

如果C1中的文本存在,则返回一个数字,否则为0.

然后您可以将D设置为

=IF(A1>0,B1,"")

您将获得此

enter image description here

答案 2 :(得分:0)

我意识到你并没有要求过滤器,但是如果你对一个稍微不同的解决方案持开放态度,这似乎运作良好。列A标题和值应从单元格A2开始。然后在单元格B1中输入搜索字词。它还将使用通配符进行过滤,并且不区分大小写(即显示fractureFracturefracturesFracturesfracturedFractured)。

Option Explicit
Sub Filter()

Dim MyArray() As Variant
Dim MyNewArray() As Variant
Dim i As Long
Dim item As Variant
Dim FilterRange As Range

With ActiveSheet
    Set FilterRange = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
    MyArray = Application.Transpose(FilterRange)
    i = 0
    For Each item In MyArray
        If UCase(item) Like "*" & UCase(Range("B1")) & "*" Then             
            ReDim Preserve MyNewArray(i)
            MyNewArray(i) = item
            i = i + 1
        End If
    Next item
    .Range(FilterRange.Address).AutoFilter Field:=1, Criteria1:=MyNewArray(), Operator:=xlFilterValues
End With

End Sub

此外,您可以在Worksheet对象中添加以下内容,这样您就不必单击按钮即可运行宏:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("B1")) Is Nothing Then
    Call Filter
End If

End Sub

老实说,你可以用Filter&gt;来实现同样的目标。 Text Filters&gt; Custom Filter。您也可以使用通配符。 :)

答案 3 :(得分:0)

我在第一行放置要搜索的字符串。

在第2行,我进行字符串匹配,以获得A列中C1匹配的第一个实例。

C2    =INDEX($A:$A,MATCH("*"&C1&"*",$A2:$A$100,0)+1)

然后从数组开始,找到与C2匹配的行作为第一行的下一个匹配项。我将最后一行修改为A100,您可以更改。

C3    =INDEX($A:$A,MATCH("*"&$C$1&"*",INDIRECT("A"&MATCH(C2,$A:$A,0)+1&":A100"),0)+MATCH(C2,$A:$A,0))

根据需要复制公式。然后根据需要复制列。

您可以使用IFERROR包装公式以抑制N / As。

enter image description here

答案 4 :(得分:0)

您还可以通过转到数据|高级: -

在Excel中使用高级过滤器

enter image description here

请注意,C1和D1中的列标题必须与A1和B1中的列标题匹配。

您还可以采用DIY方法: -

=IFERROR(INDEX(B:B,SMALL(IF(ISNUMBER(SEARCH($H$2,$B$1:$B$100000)),ROW($B$1:$B$100000)),ROW(1:1))),"")

假设搜索项在H2中,从J2开始并根据需要下拉。对于100K术语,这可能有点慢,但可以使用。必须以 Ctrl Shift Enter

作为数组公式输入