【问题标题】:Excel VBA vlookup using Dates使用日期的 Excel VBA vlookup
【发布时间】:2015-04-24 17:01:05
【问题描述】:

我正在处理 三张纸。 工作表 起始页 的日期从 A4 到 lastrow。我有一个基金趋势表,日期从 A11 到最后一行。 vlookup 正在根据起始页表中的日期列表在基金趋势表中搜索日期。基金趋势表中的搜索表范围Range(A11:C11) to lastrow。当找到日期时,它偏移 (3,0),并且显示的值是 工作表 Acurred Expenses Range("C7")。这将循环到工作表起始页 A4 中的最后一行

=VLOOKUP('起始页'!A4,'基金趋势'!A11:C21,3,0)

=VLOOKUP('起始页'!A5,'基金走势'!A12:C22,3,0)

作为代码我没有成功:

Sub equity() 

Dim Nav_date As Date 

Dim equity As Integer 

Nav_date = Sheets("Start page").Range("A4") 

equity = Application.WorksheetFunction.VLookup(Nav_date,_
 Worksheets("Fund Trend").Range("A11:C12"), 3, False) 

Sheets("Acurred Expenses").Range("C7") = equity 

End Sub

【问题讨论】:

  • 你遇到什么样的错误?您可能需要将 Nav_date = ... 设置为 ...("A4").value(添加 .value)。
  • @3578951 运行时错误 1004 - 无法获取工作表函数类的 Vlookup 属性。

标签: vba loops excel vlookup


【解决方案1】:

我认为这个答案可以分为三个部分:正确引用Range 对象的属性、检索最后一行数据以及使用循环

正确引用范围的值:


我注意到的第一件事是您试图将 Date 变量分配为 Range 对象。

这一行:

Nav_date = Sheets("Start page").Range("A4")

应该是:

Nav_date = Sheets("Start page").Range("A4").Value

Range 是一个具有属性和方法的对象。您必须明确引用 what 您想要获取的范围。它的价值,它的单元格地址,等等。

同样,这个不正确的语法在下面重复。行:

Sheets("Acurred Expenses").Range("C7") = equity

应该是:

Sheets("Acurred Expenses").Range("C7").Value = equity

编辑:根据 cmets whytheq 提出了默认属性。从技术上讲,代码Sheets("Acurred Expenses").Range("C7") = equity不正确的,并且会起作用,因为范围的默认属性是Value。我倾向于更明确,但这是我个人的偏好,所以我总是使用Range.Value,所以没有歧义。无论哪种方式都应该有效!

检索工作表的最后一行


要查找工作表中最后使用的数据行,我们可以从工作簿底部开始“查找”直到找到第一行(这将对应于工作表中数据的最后一行)。

此代码与激活 A 列中的最后一个单元格并按下 CTRL+Shit+

相同
Sub LastRow()

    Dim lRow As Long

    lRow = Cells(Rows.Count, 1).End(xlUp).Row

    Debug.Print lRow

End Sub

重申一下,这从最底行开始,一直向上,返回它停止的行号。这对应于 A 列中输入的最后一个值。如果您的数据位于不同的列中,您可能需要更改 A。

循环


最后,我们可以把我们学到的所有东西放在一起。在您拥有与您的数据集中的最后一行相对应的 lRow 之后,我们可以像这样执行 VLOOKUP 的查找:

Sub equity()

    Dim Nav_date As Date
    Dim equity As Integer
    Dim lRow As Long
    Dim i As Long

    lRow = Sheets("Start page").Cells(Rows.Count, 1).End(xlUp).Row

    For i = 4 To lRow 'Begin in Row 4 of the "Start page" sheet
        Nav_date = Sheets("Start page").Range("A" & i).Value

        'Tell code to continue even if error occurs
        On Error Resume Next

        equity = Application.WorksheetFunction.VLookup(Nav_date, _
         Worksheets("Fund Trend").Range("A11:C12"), 3, False)

        'Check the results of the VLOOKUP, an error number of 0 means no error
        If Err.Number = 0 Then
            'Here I use i+3 because the data started in row 7 and I assume
            'it will always be offset by 3 from the "Start Page"
            Sheets("Acurred Expenses").Range("C" & i + 3).Value = equity
        End If

        'Return to normal error handling
        On Error GoTo 0

    Next i

End Sub

【讨论】:

  • 谢谢。我刚刚将 Dim i 添加为整数。我在 lRow = Sheets("Startpage").Range("A1048576").End(xlUp).Row 处收到错误,但是我将其更改为 Range("A4"),但工作表中没有填充任何值。
  • 优质帖子加 1,不错!
  • 你的错误是什么?是Start page 还是Startpage。在工作表名称中省略空格会导致错误。
  • 我收到运行时错误 1004 应用程序定义或对象定义错误。它在... Sheets("Start page").Range("A1048576").End(xlUp)
  • 这也不是很好的vba:Range("A1048576").End(xlUp).Row ...这更好cells(rows.count,1).End(xlUp).Row
猜你喜欢
  • 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
相关资源
最近更新 更多