Excel formula 在另一个单元格的一部分中查找文本并返回不同的值
我需要在一个单元格中获取所有文本,然后在另一列单元格中查找(甚至部分查找)。如果存在匹配项,则需要返回与找到的单元格位于同一行中的另一个单元格的值 例如:在活页1中,单元格A1的文本为“John Smith” 现在在第2页:D列中,我需要找到列中有“John Smith”的任何单元格(可能只有一个“John Smith”,因此不必担心返回多个值),并且D列中包含“John Smith”的任何单元格都需要返回同一行第2页A列中的值 我不知道这听起来有多复杂,但这个过程需要我2到3个小时手动完成,我只是想知道是否有办法通过公式更快地完成Excel formula 在另一个单元格的一部分中查找文本并返回不同的值,excel-formula,Excel Formula,我需要在一个单元格中获取所有文本,然后在另一列单元格中查找(甚至部分查找)。如果存在匹配项,则需要返回与找到的单元格位于同一行中的另一个单元格的值 例如:在活页1中,单元格A1的文本为“John Smith” 现在在第2页:D列中,我需要找到列中有“John Smith”的任何单元格(可能只有一个“John Smith”,因此不必担心返回多个值),并且D列中包含“John Smith”的任何单元格都需要返回同一行第2页A列中的值 我不知道这听起来有多复杂,但这个过程需要我2到3个小时手动完成,我
提前感谢!:) 您可能希望使用MS Excel的脚本功能,如果这是一项常规任务,甚至可以编写一个完全独立的程序。我将给你一个C语言中的伪代码示例,向你展示这个概念 现在,我们需要为包含John姓名的单元格创建一个占位符:
字符串名称单元格(get;set;)
一个用于返回数据:字符串返回值(get;set;)
现在,让事情运转起来
首先,我们要定义正在使用的行。我们还可以使用foreach
循环来遍历工作簿中的每一行:foreach行
。但这有点复杂,因为我假设你是编程新手
所以,我们现在只使用一行。让我们称之为workingRow
:Row workingRow=workBook.Row(1)
查看工作簿末尾的编号。行?这让我们看看第一排
现在,要查看单元格并查看其包含的内容:
if (workingRow.nameCell = "John Smith")
{
returnValue = workingRow.valueCell.ToString()
}
else
{
returnValue = ""
}
这段小代码将告诉应用程序以字符串格式返回值,如果找不到“John Smith”,则返回空字符串
无论您是在Excel中使用脚本还是构建一个完全独立的程序,这都应该是相当容易的,可能需要一个小时的工作才能转化为可行的材料。祝你好运
=INDEX(Sheet2!$A:$A,match(A1,Sheet2!$D:$D,0))
部分匹配:=索引(Sheet2!$A:$A,匹配(“*”&A1&“*”,Sheet2!$D:$D,0))
以match开头:=索引(Sheet2!$A:$A,match(A1&“*”,Sheet2!$D:$D,0))
匹配
- 在D列中查找A1(“John Smith”)的值,返回其位置
- 0表示查看每个值并允许使用通配符的精确匹配,而不是更快的排序搜索(排序搜索需要排序的数据,并且在找不到所需结果时返回相邻结果)
- “*”是一个通配符,它匹配任何长度(甚至为0)的文本
- 在MATCH返回的位置返回A列中的值
VLOOKUP
,MATCH
,INDEX
。。。功能。希望这就足够开始了,如果仍然卡住,请用你的努力编辑你的帖子。我很想发布一个基于MATCH
(比@Wolfish建议的要简单得多)的答案,但后来看到@zx8754的评论,我想我最好再给你一个提示:既然你不是在寻找与A1完全匹配的答案,但对于任何包含A1值的单元格,必须使用通配符作为查找值。像这样:“*”&A1&“*”
,或者更具可读性:连接(“*”,A1,“*”)
@sls Simple是所有相关的:)我怀疑这家伙可能有一个名字列表要通过tbh运行。如果使用通配符,那么返回错误或错误数据就太容易了,我们可能有一个John Smith、一个John Smithson和一个Johnathon Smithwick。就我个人而言,我会在谨慎方面犯错误。@Wolfish好吧,OP确实提到了“甚至部分找到它”(我将其解释为子字符串搜索),但我确实同意“Smithson”与“Smith”的问题是反对我建议的天真通配符的一个非常有效的论点。至于“更简单”,我的意思是它将是一个简短的Excel公式,而不是一小时的脚本/编程工作。如果我的评论冒犯了你,我向你道歉,它根本不是这个意思:)