[英]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.