簡體   English   中英

帶有自動填充 VBA 的 Excel Vlookup

[英]Excel Vlookup with Autofill VBA

我正在嘗試制作一個看起來很簡單的宏,但事實證明它比我想象的要難。 我開始使用“點擊”方法制作它,但它並沒有我想象的那么動態。 基本上,我使用 vlookup 從另一個工作表中查找單元格 A2 中的名稱,然后將 D 列中的數字復制到當前工作表中。 查看代碼時,這部分看起來像這樣:

Range("D2").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-3],'Downstairs'!R[-1]C[-3]:R[200]C[14],4,0)"

Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D" & lastrow&)

找到第一個數字后,我嘗試自動填充其余數字。 當你運行它時它會起作用,但我認為這只是因為名稱是有序的。 但是,如果名稱不按順序,它就不會找到正確的數字,部分原因是 R[] 和 C[] 中的所有數字隨着您向下行而不斷變化。 如果我在列表中添加更多名稱,我認為它不會起作用,這是我需要做的事情。 我將 R[] 中的數字從 93 更改為 200,因為我真的不知道如何合並我之前制作的 lastrow 對象,而且我不知道另一種方法可以使這個動態。 有一個更好的方法嗎?

就像我在上面的評論中提到的那樣,您不需要 VBA。 您可以直接在 Excel 中鍵入公式並進行手動自動填充。 話雖如此,如果您仍然想要使用 VBA,那么只需在不需要使用自動填充的地方使用此代碼即可。 此代碼將使用公式填充所有相關單元格。

您的公式也沒有給您正確的結果,因為您的表數組不是恆定的,並且隨着您向下移動而發生變化。 為了防止這種情況發生,只需使用$符號。

另一個提示:如果您不擅長R1C1格式,它會非常混亂。 堅持正常的A1格式。

這是實現您想要的最簡單方法。 請修改代碼以滿足您的需求

Sub Sample()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastrow  As Long

    '~~> Change this to the releavnt sheet name
    '~~> This is the sheet where the formula will go
    Set ws1 = ThisWorkbook.Sheets("Sheet1")

    Set ws2 = ThisWorkbook.Sheets("Downstairs")

    With ws1
        '~~> Get the last row
        lastrow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Fill formula in all the relevant cells in one go
        '~~> replace my formula within quotes with your formula
        '~~> Do not forget to put the $ sign like I have done
        .Range("D1:D" & lastrow).Formula = "=VLOOKUP(A1,Downstairs!$C$1:$N$200,4,0)"
    End With
End Sub

暫無
暫無

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

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