在Google表格或Excel中,如何搜索相似的值?

时间:2018-02-21 14:45:49

标签: excel excel-formula google-sheets google-sheets-query

我想做的是以下内容:

我有一个包含3张纸的文件(tab1,tab2和tab3)。在每个中,我都有列名“公司名称”,在tab1中,我有两个名为“tab2”和“tab3”的特定列,它们代表工作表tab2和tab3。我想要做的是查询工作表tab2和tab3,看看是否有公司名称匹配100%或类似于tab1中“公司名称”列中列出的名称。

示例:

TAB1

公司名称

伟大的鞋子

TAB2

公司名称

TAB3

公司名称

Greatness Shoes Inc

因此,在上述场景中,我想输入表格tab1中的列tab2和tab3,无论是否存在与是或否的部分匹配。

在Excel或Google表格中执行此操作的最佳公式是什么?我在Excel中尝试了它,但是使用这个公式得到了非常低精度的部分匹配:

=IF(ISNA(VLOOKUP(B2 "*",'tab2'!$A$2:$A$884,1,FALSE)), "No", "Yes")

3 个答案:

答案 0 :(得分:1)

regex functions

您可以尝试:

  1. 将所有数据合并到一个工作表(A列)中以简化比较
  2. 使用公式:
  3. =TEXTJOIN(";",1,FILTER(A:A,REGEXMATCH(A:A,A1) + REGEXMATCH(A1,A:A),A:A<>A1))

    enter image description here

    注意:

    • 该公式不会给出100%的匹配,你还需要一个人来寻找拼写错误。
    • 该公式将给出所有找到的匹配除以分号
    • 如果未找到匹配项,则单元格将留空
    • 您可以手动将一些关键字添加到您的列表中,以便将类似的公司名称组合在一起:例如单词“Great”,它匹配所有内容包含此单词的公司。

    • 粘贴在B1中并复制下来。

答案 1 :(得分:1)

您可以使用Excel.Workbook activeWorkBook = Globals.ThisAddIn.Application.ActiveWorkbook; Excel.Worksheet activeWorkSheet = activeWorkBook.ActiveSheet; Excel.Range colRange = activeWorkSheet.Columns["A:A"]; Excel.Range resultActionFirstRange = null; Excel.Range resultActionCurrentRange = null; /*This is my custom list: ActionRangeList*/ List<Actions> ActionRangeList = new List<Actions>(); /* This is what I'm using to set the properties of the class before adding to the list */ Actions currentAct = new Actions(); string actionValue; string DBName; string TblName; int actionCol; int actionRow; string searchActionLabel = "Action=>"; string searchDBLabel = "DatabaseName=>"; string searchTblLabel = "TableName=>"; resultActionCurrentRange = colRange.Find(searchActionLabel, Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing); //get action while (resultActionCurrentRange != null) { if (resultActionFirstRange == null) { resultActionFirstRange = resultActionCurrentRange; actionCol = resultActionFirstRange.Column + 1; actionRow = resultActionFirstRange.Row; actionValue = (string)(activeWorkSheet.Cells[actionRow, actionCol] as Excel.Range).Value; currentAct.Action = actionValue; currentAct.actionRange = (Excel.Range)(activeWorkSheet.Cells[actionRow, actionCol]); ActionRangeList.Add(currentAct); } else if (resultActionCurrentRange.get_Address(Excel.XlReferenceStyle.xlA1) == resultActionFirstRange.get_Address(Excel.XlReferenceStyle.xlA1)) { break; } //search for next range resultActionCurrentRange = colRange.FindNext(resultActionCurrentRange); //check if we looped back to the beginning yet if (resultActionCurrentRange.get_Address(Excel.XlReferenceStyle.xlA1) != resultActionFirstRange.get_Address(Excel.XlReferenceStyle.xlA1)) { actionCol = resultActionCurrentRange.Column + 1; actionRow = resultActionCurrentRange.Row; actionValue = (string)(activeWorkSheet.Cells[actionRow, actionCol] as Excel.Range).Value; currentAct.Action = actionValue; currentAct.actionRange = (Excel.Range)(activeWorkSheet.Cells[actionRow, actionCol]); ActionRangeList.Add(currentAct); } } private class Actions { public Excel.Range actionRange { get; set; } public string Action { get; set; } } ARRAYFORMULAISNUMBER的组合。使用&#34;伟大的鞋子&#34;来自Max的例子,如果你的数据在列中,你可以把它放在B1中:

SEARCH

这样就可以在A列中搜索字符串&#34; Great。&#34;如果找到=ARRAYFORMULA(IF(ISNUMBER(SEARCH("Great",A:A))=TRUE,A:A,"")),则返回该单元格中的任何内容。如果找不到任何内容=TRUE,则会返回空白FALSE。没有必要复制下来。&#34;你可以修改那个&#34;如果是真的&#34;和&#34;如果错误&#34;语句根据需要修改数据。代替&#34; Great&#34;字符串,你可以放一个单元格引用。

您也可以使用与""类似的方式使用QUERY。在B1中你可以放ISNUMBER(SEARCH

您还可以使用=QUERY(A:A,"Select A where A contains 'Great'",0)INDEX。如果您的数据位于B1的A列,您可以输入类似MATCH的内容,您必须&#34;复制&#34;每行的公式。如果要防止显示#N / A错误,请将其全部包含在=INDEX($A1:$A3,MATCH("Great",$A1:$A3,FALSE)).公式中。 IFERROR

答案 2 :(得分:0)

为简单起见,我同意将所有数据合并到一张纸中的想法。 之后,使用以下公式:

> as.matrix(data.frame(lapply(df, function(x) as.numeric(as.character(x)))))
     a b
[1,] 0 0
[2,] 1 0
[3,] 2 1

什么是Flookup?这是一个Google表格插件。您可以在附加商店中搜索,安装和使用它。它允许您查找相似度在0%到100%之间的匹配项。 在官方网站上找到有关用法的更多信息(不允许在此处发布链接)