首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >索引-使用变量在不同的工作簿中匹配多个条件

索引-使用变量在不同的工作簿中匹配多个条件
EN

Stack Overflow用户
提问于 2015-01-03 08:51:19
回答 1查看 2.2K关注 0票数 0

我尝试使用从一个名为"Mapping File.xlsx“的工作簿中获取的变量作为索引/匹配搜索的条件,该条件在另一个名为"Extract.xlsx”的工作簿中(两者都是Sheet1)。最重要的是,我需要在列A中搜索PartNumber (字符串),在列B中搜索GroupCounter (字符串),在列C中搜索OperationNumb (字符串),并返回在列G中找到的值来查找ReturnValue (字符串)。

设置我的变量:

代码语言:javascript
运行
复制
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)

尝试使用我的变量通过索引/匹配来搜索不同的工作簿:

尝试1

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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。我已经多次尝试更改变量类型。我弄乱了引号和拆分字符串。我已经尝试将索引函数和匹配函数分开。我现在已经花了大约6个小时在谷歌搜索上,看看有什么东西在那里,调整我的代码,并重新测试,所以现在我正在寻找如何做到这一点。我不想将工作簿或工作表硬编码到索引/匹配函数中,如果我可以避免它的话,因为我将在较大的代码中使用此功能的次数。因此,我正在寻找一种方法,从3个不同的单元格中的一个工作表中提取3个条件,将它们存储为字符串,然后使用这三个字符串在第二个工作簿中搜索它所在的行,并使用该行将不同列中的值作为字符串返回(所有这些都使用尽可能多的变量名,以避免过多的硬编码)。有什么建议/想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-05 07:13:39

使用自动文件管理器怎么样?如果始终只有一条记录与所选条件匹配(或没有),则列G中请求的单元格应该始终在同一行中(在过滤掉所有其他行之后)。代码不是很优雅,但它可能会给出一些想法。它会将符合条件的行复制到单独的工作表中,并显示符合这些条件的第一行的内容。

代码语言:javascript
运行
复制
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函数。在另一列中放入this:=CONCATENATE(具有PartNumber的单元格,具有GroupCounter的单元格,具有OpetationNum的单元格),然后使用Vlookup,如下所示:VLOOKUP(具有条件的单元格1&具有条件的单元格2&具有条件的单元格3;搜索区;列G相对地址编号;0)

代码语言:javascript
运行
复制
    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)        
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27750612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档