我在.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
答案 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),"")
并复制下来:
这是进行关键字搜索的一种相当标准的方法。
答案 1 :(得分:0)
假设您要搜索B列中C1中包含的术语。 您可以尝试在A
中使用它=IF(C1<>"",IFERROR(FIND(C1,B1,1),0),0)
如果C1中的文本存在,则返回一个数字,否则为0.
然后您可以将D设置为
=IF(A1>0,B1,"")
您将获得此
答案 2 :(得分:0)
我意识到你并没有要求过滤器,但是如果你对一个稍微不同的解决方案持开放态度,这似乎运作良好。列A标题和值应从单元格A2
开始。然后在单元格B1
中输入搜索字词。它还将使用通配符进行过滤,并且不区分大小写(即显示fracture
,Fracture
,fractures
,Fractures
,fractured
,Fractured
)。
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。
答案 4 :(得分:0)