我需要在一个单元格中获取所有文本,并在另一列单元格中找到它(甚至部分找到它) . 如果存在匹配,则需要返回与找到的单元格在同一行中的另一个单元格的值 .
例如:在工作表1中,单元格A1具有文本“John Smith” .
现在在表2中:列DI需要在列中找到具有“John Smith”的任何单元格(可能只有一个“John Smith”,因此无需担心返回多个值)以及D列表2中的任何单元格包含“John Smith”需要返回相同ROW的第2页Columna A中的值 .
我不知道这听起来有多复杂,但这个过程需要2到3个小时才能手动完成,只是想知道是否有办法通过公式更快地完成 .
提前致谢! :)
3 回答
您可能希望使用MS Excel的脚本功能,或者如果这是常规任务,甚至可以编写完全独立的程序 . 我将在C#中给你一个 pseudo-code 例子来向你展示这个概念 .
现在,我们需要为包含's John'名称的单元格创建占位符:
string nameCell (get; set;)
还有一个用于返回的数据:
string returnValue (get; set;)
现在,为了让事情顺利进行 .
首先,我们想要定义我们正在使用的行 . 我们还可以使用
foreach
循环遍历每一行:foreach Row row in workBook
. 但是假设你是编程的新手,那就是's a little complicated, since I'm .所以,我们'll just use the one row for now. Let'称之为
workingRow
:Row workingRow = workBook.row(1)
看到
workbook.row
末尾的那个号码?这告诉我们要看第一排 .现在,查看单元格并查看它包含的内容:
这段小代码将告诉应用程序以字符串格式返回值,而如果找不到“John Smith”则返回空字符串 .
无论是在Excel中使用脚本还是构建完全独立的程序,这都可能相当容易,可能是一个小时的工作,转换为可用的材料 . 祝好运!
完全匹配:
=INDEX(Sheet2!$A:$A,MATCH(A1,Sheet2!$D:$D,0))
部分匹配:
=INDEX(Sheet2!$A:$A,MATCH("*"&A1&"*",Sheet2!$D:$D,0))
开始 - 匹配:
=INDEX(Sheet2!$A:$A,MATCH(A1&"*",Sheet2!$D:$D,0))
比赛
在D列中找到A1("John Smith")的值,返回其位置
0表示查看每个值并允许使用通配符的完全匹配,而不是更快的排序搜索(排序搜索需要排序数据并在找不到您想要的结果时返回相邻结果)
"*"是匹配任何(偶数为0)长度的任何文本的通配符
指数
使用 MATCH() 函数找出Sheet 2 "John smith"上D列中的哪一行 . 确保您的D列按字母顺序排序 .
使用 OFFSET() 与工作表2上的单元格A1作为参考(或者要从中显示数据的列的顶部DATA(非 Headers )单元格)和上面的MATCH()函数的结果作为"rows"参数
如果您正在努力实现预期的结果,请发布您拥有的内容,我们可以进一步提供帮助 .