【发布时间】:2016-11-07 10:41:44
【问题描述】:
我想查找某个产品代码(a 列)的值,因为它对应于一周(在第 1 行中以数字形式列出)。周代码(在第 1 行)指的是每周都有一张工作表的工作簿,与此处显示的完全相同。我想去那个工作簿,访问正确的工作表,找到产品代码,然后从 L 列中提取相应的单元格。我不知道该怎么写。
我有大约 500 个周代码和 500 个产品代码,所以我认为需要一个宏。
一个有用的例子:在单元格 B2 中,我想从工作表 40111 中的“组合性能跟踪.xlsx”列 L 中找到与 NPPP 相对应的数据。
到目前为止我已经写了这个,但是当我运行它时,我的索引匹配被单独列为一个问题。任何想法如何解决这个问题?
Sub populate()
Dim ws As Worksheet
Dim count
Dim count2
Dim stock_code
Dim rep
Dim sheet_name As String
ws = Sheets("Sheet3")
For count = 2 To 140
sheet_name = ws.Cells(1, count)
For count2 = 2 To 873
stock_code = ws.Cells(count2, 1)
Workbooks("Combined Performance tracking.xlsx").Activate
For rep = 1 To (Worksheets.count)
If sheet_name = Sheets(rep).Name Then
index($a$5:$az$800, match(stock_code, $A$5:$A$800, 0), match("uber", $a$5:$az$5, 0)
ActiveCell.Select
ActiveCell.Copy
Workbooks("Jody Project Final.xlsm").Activate
Worksheets("sheet3").Cells(count2, count).Activate
ActiveCell.Select
ActiveCell.Paste
End If
Next
Next
Next
End Sub
【问题讨论】:
-
索引在很多方面都不是正确的语法,您还需要为其分配一个变量以获得结果。此外,您也许可以使用带有单元格拖动的公式(但宏可能更有效)
-
您必须将 volatile INDIRECT function 合并到您的 INDEX/MATCH 函数对中才能将其用作本机函数,但您可以使用 WorksheetFunction object.. 构建一些东西跨度>
-
你也确定工作簿中会存在工作表吗?
-
是的,工作表将存在。我使用复制确切工作表名称的宏提取了这些列标题。我如何将间接功能纳入其中?
-
这条线在做什么?
sheet_name=wsdata.cells(1, count)wsdata是在哪里声明的?或者你的意思是sheet_name=ws.cells(1,count)?此外,将Option Explicit添加到非常 顶部(Sub populate()上方)以强制您声明您正在使用的所有变量。