我正在尝试使用一个名为" Mapping File.xlsx"作为INDEX / MATCH搜索中的标准,在不同的工作簿中称为" Extract.xlsx" (均为Sheet1)。最重要的是我需要在A列中搜索PartNumber(字符串),在GroupCounter(String)中搜索B列,在OperationNumb(String)中搜索C列,并返回在列G中找到的值以返回ReturnValue(String)。
设置我的变量:
Dim PartNumber, GroupCounter, OperationNumb, ReturnValue As String 'Inputs are strings that are actually pulled from first workbook
PartNumber = Workbooks("Mapping File.xlsx").Worksheets("Sheet1").Cells(2, 1)
GroupCounter = Workbooks("Mapping File.xlsx").Worksheets("Sheet1").Cells(2, 2)
OperationNumb = Workbooks("Mapping File.xlsx").Worksheets("Sheet1").Cells(5, 1)
尝试使用我的变量使用INDEX / MATCHING搜索不同的工作簿:
尝试1
str = "=INDEX(G:G, MATCH(1, (PartNumber=A:A)*(GroupCounter=B:B)*(OperationNumb=D:D),0))"
ReturnValue = Workbooks("Extract.xlsx").Worksheets("Sheet1").Evaluate(str)
尝试2
str = "=INDEX(G:G, MATCH(PartNumber & GroupCounter & OperationNumb, Workbooks("Extract.xlsx").Worksheets("Sheet1").Range("A:A") & Workbooks("Extract.xlsx").Worksheets("Sheet1").Range("B:B") & Workbooks("Extract.xlsx").Worksheets("Sheet1").Range("C:C")),0))"
ReturnValue = Workbooks("Extract.xlsx").Worksheets("Sheet1").Evaluate(str)
尝试3 - 30
我试图声明范围并使用MATCH_array中范围的变量名称。我搞砸了宣布工作簿和工作表。我尝试过使用SUMPRODUCT。我尝试多次更改我的变量类型。我搞乱了引号并将字符串分开了。我试过将INDEX和MATCH函数分开。我现在花了大约6个小时在谷歌搜索上看到了什么,调整我的代码,并重新测试,所以现在我正在寻找如何做到这一点。我不想将工作簿或工作表硬编码到INDEX / MATCHING函数中,如果我可以避免它,因为我将在更大的代码中使用此功能的次数。因此,我正在寻找一种方法从3个不同单元格中的一个工作表中提取3个条件,将它们存储为字符串,然后使用这三个字符串搜索第二个工作簿以查找它出现的行,并使用该行将不同列中的值作为字符串返回(所有这些都使用尽可能多的变量名称以避免大量硬编码)。有什么建议/想法吗?
答案 0 :(得分:0)
使用自动翻油机怎么样? 如果始终只有一个记录匹配(或没有)所选条件,则列G中的请求单元格应始终位于同一行中(在过滤掉所有其他行之后)。 代码不优雅,但也许会提供一些想法。它将符合条件的行复制到单独的工作表,并显示符合这些条件的第一行的内容。
Sub Makro2()
Application.DisplayAlerts = False
On Error Resume Next
ThisWorkbook.Sheets("Results").Delete
ThisWorkbook.Sheets.Add.Name = "Results"
Application.DisplayAlerts = True
Sheets("Arkusz1").Select
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="a" ` use PartNumber inestead of "a"
Selection.AutoFilter Field:=2, Criteria1:="b" `use GroupCounter instead of "b"
Selection.AutoFilter Field:=3, Criteria1:="c" ` use OperationNum instead of "c"
Selection.SpecialCells(xlCellTypeVisible).Copy
Sheets("Results").Paste
Var = Sheets("Arkusz1").Range("G4")
MsgBox Var
Sheets("Arkusz1").Activate
Cells.Select
Selection.AutoFilter
End Sub
另一种选择是使用函数CONCATENATE来连接这3个条件并生成一个字符串,然后使用VLOOKUP函数。在另一个栏目中:= CONCATENATE(具有PartNumber的单元格,具有GroupCounter的单元格,具有OpetationNum的单元格)然后使用Vlookup,如此= VLOOKUP(带有标准2的单元格&带有标准3的单元格;搜索区域;列G相对地址数字; 0)
B C D E F G H
3 a e m `=CONCATENATE(A1;B1;C1) 1
4 a f n afn 2
5 b g o bgo 3
6 b h p bhp 4
7 c i q ciq 5
8 c j r cjr 6
9 d k s dks 7
10 d l t dlt 8
11
12
13 c j r `=VLOOKUP(A11&B11&C11;$D$1:$G$8;4;0)