簡體   English   中英

使用日期的Excel VBA vlookup

[英]Excel VBA vlookup using Dates

我正在處理三張紙。 工作表起始頁的日期從A4到最后一行。 我有一個基金趨勢表 ,日期從A11到最后一行。 vlookup根據起始頁工作表中的日期列表在基金趨勢工作表中搜索日期 資金趨勢表中的搜索表范圍Range(A11:C11)至lastrow 找到日期后,它會偏移(3,0) ,並且該值將顯示在工作表已發生費用范圍(“ 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

我認為這個答案可以分為三個部分:正確引用Range對象的屬性,檢索數據的最后一行以及使用循環

正確引用范圍的值:


我注意到的第一件事是您試圖將Date變量分配為Range對象。

這行:

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

應該:

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

Range是具有屬性和方法的對象。 你必須明確地引用它是什么 ,你想要得到的范圍內。 它是值,它是單元格地址等。

同樣,下面將重復此錯誤語法。 該行:

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

應該:

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

編輯:根據注釋, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM