Excel formula 在另一个单元格的一部分中查找文本并返回不同的值

Excel formula 在另一个单元格的一部分中查找文本并返回不同的值,excel-formula,Excel Formula,我需要在一个单元格中获取所有文本,然后在另一列单元格中查找(甚至部分查找)。如果存在匹配项,则需要返回与找到的单元格位于同一行中的另一个单元格的值 例如:在活页1中,单元格A1的文本为“John Smith” 现在在第2页:D列中,我需要找到列中有“John Smith”的任何单元格(可能只有一个“John Smith”,因此不必担心返回多个值),并且D列中包含“John Smith”的任何单元格都需要返回同一行第2页A列中的值 我不知道这听起来有多复杂,但这个过程需要我2到3个小时手动完成,我

我需要在一个单元格中获取所有文本,然后在另一列单元格中查找(甚至部分查找)。如果存在匹配项,则需要返回与找到的单元格位于同一行中的另一个单元格的值

例如:在活页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中使用脚本还是构建一个完全独立的程序,这都应该是相当容易的,可能需要一个小时的工作才能转化为可行的材料。祝你好运

  • 使用函数找出第2页“John smith”D列中的哪一行。确保D列按字母顺序排列
  • 使用将工作表2上的单元格A1作为参考(或要显示数据的列的顶部数据(非标题)单元格),并将上面MATCH()函数的结果作为“rows”参数
  • 如果您正在努力实现期望的结果,请发布您所拥有的,我们可以进一步提供帮助。

    精确匹配:
    =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公式,而不是一小时的脚本/编程工作。如果我的评论冒犯了你,我向你道歉,它根本不是这个意思:)