【发布时间】:2017-08-18 09:12:23
【问题描述】:
对于一个小型项目,我想在 VBA 中使用 vlookup 或匹配来从另一个工作表中获取数据。我发现这是一项艰巨的任务,即使在谷歌的帮助下我也找不到解决方案。
我将项目分为三个阶段:
- 第一阶段是在 VBA 中创建一个有效的 Vlookup(无法正常工作)
- 搜索需要执行的范围(动态)(我想我管理好了)
- 循环遍历表格中的所有单元格(完全停留在“For each”语句上)
我设法获取动态范围#Firstcell 和#Lastcell
但我真的被困在循环和 vlookup 上。 我想以这样的方式创建 vlookup,对于每个单元格,X 将是 A 和行号,Y 将是 Columnletter 和“4”。 vlookup需要从Firstcell执行到Lastcell。
Sub Match_Values()
' Variables
Dim X As Integer
Dim Y As Integer
Dim Firstcell As Integer
Dim Lastcell As Integer
' Range determination
With ActiveSheet
Range("A3").Select
Selection.End(xlToRight).Select
Firstcell = ActiveCell.Offset(1, 1).Range("A1").Select
End With
With ActiveSheet
Lastcell = ActiveCell.SpecialCells(xlLastCell).Select
End With
' For each cell create a vlookup with on rowindex en on y the columnindex loop statement
' Vlookup
With WorksheetFunction
c04 = .VLookup(X, [Pivot!A4:CC99], .Match(Y, [Sheet1!A4:CC4], 0), False)
End With
MsgBox c04
End Sub
提前致谢,如果我需要提供其他反馈,请告诉我。
编辑,感谢反馈 我上传了示例文件:https://ufile.io/48evu (很抱歉没看到在stackoverflow中如何披露)
【问题讨论】:
-
什么是“vloop”——是“loop”的拼写错误还是“vlookup”的拼写错误?细节很重要。
-
退后一步。发布数据样本并解释您想要实现的目标。你们都设定了一个特定的公式来实现你的目标。也许这个公式是错误的方法。也许这可以在没有 VBA 的情况下完成。也许你在问XY question。
-
附注:如果您的前 2 个
With语句在Range等之前不与前导.一起使用,则它们将不起作用。您应该避免使用 @987654332 @。还有always useLonginstead ofInteger。Firstcell = ActiveCell.Offset(1, 1).Range("A1").Select也不起作用。你期望Firstcell是什么?一个细胞?行号?列号?一个值? -
@teylyn 我包含了文件和打印屏幕。 Peh:我希望细胞像“X5”之类的东西。我只能看到它移动到正确的单元格。所以我猜它成功了。
-
@Dubblej 不,它不起作用。此行仅选择单元格 A1,但不会将位置或类似内容保存到变量
Firstcell。