【问题标题】:VBA Loop of Vlookup with dynamic colums具有动态列的 Vlookup 的 VBA 循环
【发布时间】: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中如何披露)

图片1

图 2

【问题讨论】:

  • 什么是“vloop”——是“loop”的拼写错误还是“vlookup”的拼写错误?细节很重要。
  • 退后一步。发布数据样本并解释您想要实现的目标。你们都设定了一个特定的公式来实现你的目标。也许这个公式是错误的方法。也许这可以在没有 VBA 的情况下完成。也许你在问XY question
  • 附注:如果您的前 2 个 With 语句在 Range 等之前不与前导 . 一起使用,则它们将不起作用。您应该避免使用 @987654332 @。还有always use Long instead of IntegerFirstcell = ActiveCell.Offset(1, 1).Range("A1").Select 也不起作用。你期望Firstcell 是什么?一个细胞?行号?列号?一个值?
  • @teylyn 我包含了文件和打印屏幕。 Peh:我希望细胞像“X5”之类的东西。我只能看到它移动到正确的单元格。所以我猜它成功了。
  • @Dubblej 不,它不起作用。此行仅选择单元格 A1,但不会将位置或类似内容保存到变量 Firstcell

标签: vba excel


【解决方案1】:

我找到了一种使我的脚本工作的方法。

我同意 Peh 的观点,即我应该更多地研究 VBA,但它确实有效。 也许这对尝试类似的东西的人很有用,它可以回答问题。

感谢支持!

Private Sub Match_Values()
' Variables
Dim Firstcell As String
Dim Lastcell As String
Dim sht As Worksheet

' Range determination
    With ActiveSheet
        Range("A3").Select
        Selection.End(xlToRight).Select
        ActiveCell.Offset(1, 1).Range("A1").Select
        Firstcell = ActiveCell.Address
    End With

    With ActiveSheet
        ActiveCell.SpecialCells(xlLastCell).Select
        Lastcell = ActiveCell.Address
    End With

Dim rng As Range: Set rng = Application.Range("Overview!" & Firstcell & ":" & Lastcell)
Dim cel As Range
For Each cel In rng.Cells

    cel.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC1,Pivot!R4C1:R100C50,MATCH(Overview!R2C,Pivot!R4C1:R4C50,0),FALSE),""Error"")"
Next cel

End Sub

您好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2018-01-10
    • 2015-10-15
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多