我想做的是以下内容:
我有一个包含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")
答案 0 :(得分:1)
google-spreadsgeets有regex functions。
您可以尝试:
答案 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; }
}
,ARRAYFORMULA
和ISNUMBER
的组合。使用&#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%之间的匹配项。 在官方网站上找到有关用法的更多信息(不允许在此处发布链接)