我有一张包含 7000 行数据的 Excel 表。我需要进行筛选的列全是职位描述。单个单元格内有很多单词,如下所示:
我想要做的是搜索所有这些招聘信息,以查找 Python 或 SQL 等特定词语。我遇到的问题是一个特定的搜索:R。R 语言确实出现在许多描述中,但我尝试通过单个字符进行过滤的所有内容似乎都没有返回所有正确的单元格。
我曾尝试使用通配符,就像R~*
我也尝试使用Begins with: R
和Ends with:
(空格)一样
知道最好的解决方法是什么吗?大概在职位描述中显示 R 语言的唯一方式是单独显示:“R”或在逗号前的句子中显示:“R”,
源数据可以在Kaggle上找到:https://www.kaggle.com/sl6149/data-scientist-job-market-in-the-us。我正在尝试将过滤器应用于 allData.csv 中的描述列(但将其更改为 .xlsx 以避免出现问题)。
最后编辑:本来打算将其作为“答案”发布并让其被接受,但认为这可能不诚实。我不再尝试按 进行过滤R
。我几乎尝试了这里发布的每种尝试,但结果都不准确。我只是要将 R 从我的报告中排除。感谢大家的时间,我真的尽力让它发挥作用。
答案1
如果您拥有具有该FILTERXML
功能的 Excel 2013+,则可以使用高级筛选。
构建一个以空格分隔的 XML。您可能还需要用空格替换各种标点符号,并且可能还需要替换换行符(如果存在的话) ( CHAR(10)
)
然后查找R
(比较区分大小写)并过滤。
例如:
消除,
,.
,!
,?
并Trim
删除所有多余的空格*
TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A8,","," "),"."," "),"!"," "),"?"," "))
创建由空格定义的节点的 xml
<t><s>" &SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A8,","," "),"."," "),"!"," "),"?"," "))," ","</s><s>") & "</s></t>"
使用FILTERXML
与xpath
仅返回R
并将NOT(ISERROR(…
结果转换为TRUE
或FALSE
在公式中,A8
是第一个包含要测试数据的单元格。
标准
=NOT(ISERROR(FILTERXML("<t><s>" &SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A8,","," "),"."," "),"!"," "),"?"," "))," ","</s><s>") & "</s></t>","//s[.='R']")))
如果您想一次过滤多个项目,只需在相邻行重复条件公式并更改部分[.='R']
。
例如:
=NOT(ISERROR(FILTERXML("<t><s>" &SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A8,","," "),"."," "),"!"," "),"?"," "))," ","</s><s>") & "</s></t>","//s[.='SQL']")))
=NOT(ISERROR(FILTERXML("<t><s>" &SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A8,","," "),"."," "),"!"," "),"?"," "))," ","</s><s>") & "</s></t>","//s[.='Python']")))
前
后
编辑:
如果您使用的是早期版本的 Excel,其中没有任何FILTERXML
函数,则可以使用以下条件公式:
=SUMPRODUCT(--(EXACT("R",TRIM(MID(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A8,","," "),"."," "),"!"," "),"?"," "))," ",REPT(" ",99)),seq_99,99)))))=1
其中seq_99
命名公式指的是:
=IF(ROW(INDEX($A$1:$A$65535,1,1):INDEX($A$1:$A$65535,255,1))=1,1,(ROW(INDEX($A$1:$A$65535,1,1):INDEX($A$1:$A$65535,255,1))-1)*99)
答案2
如果 R 的不同排列数量相当可控,您可以在辅助列中手动构建一个公式来为您执行此操作。从您的问题中我不太清楚您现在使用的是什么“搜索”方法(过滤、ctrl+f、基于公式),所以我不确定这是否是您要寻找的方向,但它会起作用。
基本上利用FIND
本机区分大小写的事实并编写一个公式来查找“R”可能在文本字符串中出现的不同方式,然后将它们混合在一起。
演示
B2
公式:
=NOT(ISERROR(FIND("R ",$A2)))
C2
公式:
=NOT(ISERROR(FIND("R,",$A2)))
D2
公式:
=NOT(ISERROR(FIND("R.",$A2)))
E2
公式:
=NOT(ISERROR(FIND("R",$A2,LEN($A2))))
结果
因此,如果这些可能性正是您想要寻找的 - 大写 R 后跟空格、逗号、句点或单元格中的最后一个字符 - 辅助列中的这个公式将为您提供该结果。
=NOT(ISERROR(FIND("R ",$A2)))+NOT(ISERROR(FIND("R,",$A2)))+NOT(ISERROR(FIND("R.",$A2)))+NOT(ISERROR(FIND("R",$A2,LEN($A2))))
如果每个测试都是假的,那么就会输出 0,因此您可以通过这种方式进行过滤。
答案3
在 Excel 中筛选整个单词确实并不容易。
最简单的方法可能是使用正则表达式。由于 Excel 不支持正则表达式,因此我使用免费的RegEx 查找/替换加入(我与它没有任何关系,只是一个狂热用户)。
您可以添加一个辅助列来检查 R 是否包含在列中,然后根据它进行过滤。
=RegExTest(A2,"(^|\W)R($|[^\w&])")
怎么运行的:
RegExTest
检查文本中是否找到模式- 字符串的开头,或者任何非单词字符(空格、标点符号……):
(^|\W)
- 其次是
R
- 后跟任何非单词字符、非字符串
&
或字符串结尾($|[^\w&])