簡體   English   中英

清理VLOOKUP / INDEX(MATCH())VBA

[英]Cleaning up VLOOKUP / INDEX(MATCH()) VBA

我錄制了以下宏:

ActiveCell.FormulaR1C1 = _
            "=INDEX(Sheet1!R2C2:R491C2,MATCH(Sheet2!RC[-2],Sheet1!R2C1:R491C1,0))"
        Range("D2").End (xlToLeft)
        Range("C2").End (xlDown)
        Range("D882").Select
        Range(Selection, Selection.End(xlUp)).Select
        Selection.FillDown

正如你們中的一些人所能說的那樣,這不僅僅是錄音的結果,而是試圖從所述錄音中編輯“選擇”語句。 但是,VBA告訴我,我正在錯誤地使用.End屬性。 編輯它的最佳方法是什么,以便不使用select,並且范圍的結尾僅取決於每行填充的A列中的值?

更一般的宏的結構將是:

1) Select cell D2 in Sheet(1) (the cell under Header_1)
2) Write an INDEX(MATCH()) formula here referencing some specific columns in Sheet(1) and Sheet(2)
3) Select D2 in Sheet(2) and copy down to Dn where n is the first row where An = "".

然后我會簡單地重復這個所需的另外兩個INDEX(MATCH())公式。

更新:

是否還有一種方法可以設置INDEX(MATCH()),以便只要單元格不為空(例如R2C1:Rnonblank),列范圍就會繼續。 更具體地說,我可以使用相同的&Cells()方法嗎? 這些范圍將更長或更短,具體取決於所針對的工作簿。

假設此公式在第2行的D列中,只要列A中有條目,並且需要使用Sheet1列B上的所有單元格:

Dim LR as long
lr = sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).row
Range("D2:D" & Cells(Rows.Count, "A").End(xlUp).Row).FormulaR1C1 = _
                "=INDEX(Sheet1!R2C2:R" & lr & "C2,MATCH(RC[-2],Sheet1!R2C1:R" & lr & "C1,0))"

簡答你不需要這些線,他們什么都不做。 當您使用鍵盤導航到數據底部時,它們被記錄下來。

長答案 .End屬性返回一個Range對象,但是你的宏在這些行上沒有做任何事情。 而不是完成所有這些選擇,決定你想要的范圍,並在該范圍內調用.FillDown 最簡單的是有一個固定的范圍: Range("D2:D822").Filldown但如果你願意,你可以使它更聰明。

嘗試詳細描述如何決定下拉哪些單元格,我們可以幫助您將其轉換為代碼。

暫無
暫無

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

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