【问题标题】:Generating vLookup-formula with over 250 "parts" with VBA使用 VBA 生成具有 250 多个“部分”的 vLookup 公式
【发布时间】:2017-08-16 09:41:06
【问题描述】:

我的问题是:如何通过 VBA 将多个 vLookup 公式添加到一个单元格中?

我知道我可以像这样添加一个 vLookUp:

... = Application.WorksheetFunction.vLookUp("Search","Matrix","Index")

我的问题是:我有一个 255 页的工作簿,在我的“总和表”中,我需要在这 255 个工作表中搜索我需要的数据的变量公式。 因此,excel 中宏的输出需要类似于(全部在一个单元格中):

=vLoookUp($A2;Sheet1!A1:A1000;2)+SVERWEIS($A2;Sheet2!A1:A1000;2)+ ...(255 times)

甚至可以用 VBA 做类似的事情吗?

这是我用来将不同选项分成 255 张的代码:

这是我迄今为止编写的用于拆分股票的不同变体的代码: (它有点工作,但我确信它不是很有效,我对所有这些编程东西都是新手)

Sub Sheets()
Application.ScreenUpdating = False
ActiveWindow.WindowState = xlMinimized

Dim Data As String
Dim i As Long
Dim k As Long
Dim x As Long
Dim y As String


For i = 2 To 255

Sheetname = Worksheets("Input").Cells(i, 1).Value
Worksheets.Add.Name = Sheetname
ActiveSheet.Move After:=Worksheets(ActiveWorkbook.Sheets.Count)

x = 1

For k = 2 To 876
Data = Worksheets("Input").Cells(i, k).Value
y = Cells(1, x).Address(RowAbsolute:=False, ColumnAbsolute:=False)
BloomB = "=BDH(" & y & ",""TURNOVER"",""8/1/2011"",""4/30/2016"",""Dir=V"",""Dts=S"",""Sort=A"",""Quote=C"",""QtTyp=Y"",""Days=T"",""Per=cd"",""DtFmt=D"",""UseDPDF=Y"")"
Worksheets(Sheetname).Cells(1, x) = Data
Worksheets(Sheetname).Cells(2, x) = BloomB
x = x + 2
Next k

Application.Wait (Now + TimeValue("0:00:05"))
Next i

ActiveWindow.WindowState = xlMaximized
Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 我知道这个问题很模糊。但是由于 VBA 的技能有限,我根本无法提出更具体的问题。我真的希望还有人可以帮助我。
  • 查看循环表单,使用变量存储总和并将每个后续循环添加到其中。
  • Excel 2016 中公式的最大长度为 8192,因此如果查找时间过长,您可能会接近该限制。您可能必须将其分成两个或三个单元格。不清楚您是要在 VB 中计算(如您的示例所示)还是使用 VB 创建由 Excel 计算引擎计算的公式?
  • 每张纸的布局都一样吗? IE。你能把每张纸上的同一个单元格相加吗?
  • 尽管 Bloomberg 没有提供每个日期的每只股票的数据,但您最好更改流程,以便您的工作表确实包含每个日期的每只股票的详细信息. (即更新使用每日彭博数据填充工作表的代码。)然后进行=SUM(Sheet1:Sheet255!A5) 类型计算就变成了一个简单的练习。

标签: vba excel


【解决方案1】:

抱歉,这听起来是一个非常糟糕的设计。也许 Access 或 SQL Server 会更适合这种任务。此外,您知道 VLOOKUP 函数将返回第一个匹配项,但不会返回后续匹配项,对吧。只是想让你意识到这一点。好的,现在试试这个。

Function VLOOKAllSheets(Look_Value As Variant, Tble_Array As Range, _
                          Col_num As Integer, Optional Range_look As Boolean)
''''''''''''''''''''''''''''''''''''''''''''''''
'Written by OzGrid.com
'Use VLOOKUP to Look across ALL Worksheets and stops _
at the first match found.
'''''''''''''''''''''''''''''''''''''''''''''''''

Dim wSheet As Worksheet
Dim vFound

On Error Resume Next

    For Each wSheet In ActiveWorkbook.Worksheets
        With wSheet
        Set Tble_Array = .Range(Tble_Array.Address)
            vFound = WorksheetFunction.VLookup _
            (Look_Value, Tble_Array, _
            Col_num, Range_look)
        End With
        If Not IsEmpty(vFound) Then Exit For
    Next wSheet

    Set Tble_Array = Nothing
    VLOOKAllSheets = vFound

End Function

所有内容的完整描述都在这里。

http://www.ozgrid.com/VBA/VlookupAllSheets.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多