我知道这很简单,但我不知道我哪里出错了——请帮忙
场景设置:
我目前在工作簿中有 3 个工作表
表1 – 包含将根据比赛的固定日期移动的原始数据
表2 - 由从表 1 复制的原始数据组成
查看 – 来自 sheet2 的数据 View
该过程是-用户将手动将夹具拖放到 sheet1 中,然后剪辑启用宏的按钮,该按钮将获取夹具的副本并在 sheet2 中添加带有数据的其他列
然后将单击最后一个按钮以在“ View ”表中创建此数据的 View 。
View 表所做的只是调用一个名为 VnthLookup
的已定义模块。用相对值填充每个单元格。
问题
目前,每个工作表的 VBA 和公式工作正常,并且在创建 View 时,如果我通过单击单元格并单击键盘上的返回按钮手动提示计算,它会更新并且工作正常。但是,当我尝试重新计算整个 View 表时,它会超时并且需要永远完成计算(最多一个小时 + 仅 30 行,8 个列标题)
vnthlookup 模块的编码是
Public Function VlookupNth(MyVal As Variant, MyRange As Range, Optional ColRef As Long, Optional Nth As Long = 1)
Dim Count, i As Long
Dim MySheet As Worksheet
Count = 0
Set MySheet = Sheets(MyRange.Parent.Name)
If ColRef = 0 Then ColRef = MyRange.Columns.Count
For i = MyRange.Row To MyRange.Row + MyRange.Rows.Count - 1
If MySheet.Cells(i, MyRange.Column).Value = MyVal Then
Count = Count + 1
If Count = Nth Then
VlookupNth = MySheet.Cells(i, MyRange.Column + ColRef - 1).Value
Exit Function
End If
End If
Next i
VlookupNth = ""
End Function
我的 View 表在从 B 列到 J 列的每个单元格中都有以下公式 - 根据我从 sheet2 请求返回的值,“X”会有所不同。
=VlookupNth(1,Sheet2!C:AAA,X,2)
任何有助于理解为什么需要这么长时间的帮助将不胜感激。
p.s 很乐意发送工作簿,如果解释需要澄清,请给我一个转发地址。
最佳答案
你有两个问题:
MyRange
你已经拥有的变量。 改写如下:
Public Function VlookupNth(ByVal MyVal As Variant, ByVal MyRange As Range, Optional ByVal ColRef As Long = 0, Optional ByVal Nth As Long = 1) As Variant
Dim Count As Long, i As Long
Count = 0
If ColRef = 0 Then ColRef = MyRange.Columns.Count
'Do not consider uninitialized rows
Set MyRange = Application.Intersect(MyRange, MyRange.Parent.UsedRange)
If Not MyRange Is Nothing Then
For i = 1 To MyRange.Rows.Count
If MyRange.Cells(i, 1).Value = MyVal Then
Count = Count + 1
If Count = Nth Then
VlookupNth = MyRange.Cells(i, ColRef).Value
Exit Function
End If
End If
Next i
End If
VlookupNth = ""
End Function
关于performance - VBA 计算性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122580/