2015-03-25 87 views
0

我想VLOOKUP在2張工作表中的某些值,如果找到值,那麼我在Sheet 1單元上放置一個超鏈接,將它指向Sheet 2單元格。通過VBA運行Excel公式

我寫了一個相同的Excel公式,它工作正常。但我無法將其轉換爲VBA公式。我究竟做錯了什麼?

Excel公式: =IF(ISERROR(VLOOKUP(RC[7],Sheet2!R1C1:R20C1,1,FALSE)),RC[7],HYPERLINK(CELL("address",INDEX(Sheet2!R1C1:R20C1,MATCH(RC[7],Sheet2!R1C1:R20C1,0))),RC[7]))

VBA公式,我曾嘗試:

Sheets(4).Formula = "= IF(ISERROR(VLOOKUP(RC[7],Sheet2!R4C2:R" & Lrow2 & "C2,1,FALSE)),RC[7],HYPERLINK(CELL(" & """address""" & ",INDEX(Sheet2!R4C2:" & "R" & Lrow2 & "C2,MATCH(RC[7],Sheet2!R4C2:" & "R" & Lrow2 & "C2,0))),RC[7]))" 

P.S:不要擔心的行和列的索引。我寫了測試文件的公式併爲主文件寫入了vba。

+0

不要考慮「迴歸基礎」。你想在這裏做什麼?您的Excel配方和支持vba *非常脆弱。 – Bathsheba 2015-03-25 08:12:46

+0

剛剛嘗試了你的VBA公式,添加了'Cells(1,1)',它工作。註釋爲了測試目的,我將工作表索引更改爲1。 (1).Cells(1,1)。Form1 = _ 「= IF(ISERROR(VLOOKUP(RC [7],Sheet2!R4C2:R&Lrow2&」C2,1,FALSE)),RC [ 7],HYPERLINK(CELL(「&」,「address」,「&」,INDEX(Sheet2!R4C2:「&」R「&Lrow2&」C2,MATCH(RC [7],Sheet2!R4C2: R「&Lrow2&」C2,0))),RC [7]))'' – 2015-03-25 08:16:17

+0

@BranislavKollár謝謝。該公式現在正在工作。 'Sheet(1).Cells(Lrow3,3).FormulaR1C1 =「= IF(ISERROR(VLOOKUP(Sheet4!R&Lrow3&」C9,Sheet2!R4C2:R&Lrow2&「C2,1,FALSE)) ,Sheet4!R&Lrow3&「C9,HYPERLINK(CELL(」&「」「address」「」&「,INDEX(Sheet2!R4C2:」&「R」&Lrow2&「C2,MATCH(Sheet4!R」 &Lrow3&「C9,Sheet2!R4C2:」&「R」&Lrow2&「C2,0))),Sheet4!R&Lrow3&」C9))''但是我又遇到了另一個問題。當我運行我的整個代碼時,一個彈出窗口被顯示2次(1個用於Sheet4,另一個用於Sheet2)詢問文件名。 「」「地址」「」有什麼問題嗎? – 2015-03-25 08:43:01

回答

1

只是你犯了一個小錯誤。

Sheets(4).Formula = ""表示應用在sheet4上的公式。邏輯上表4有近百萬行。公式在哪裏坐?

Sheet(4).cells(row, column).Formula = "" 

下面是一個例子,我剛寫了幾分鐘回來SUMIF

shPivotAdjustmentsIRSPV.Cells(NumRows, NumColumns + 1).Formula = 
"=Sum(" & shPivotAdjustmentsIRSPV.Cells(3, NumColumns + 1).Address & 
":" & shPivotAdjustmentsIRSPV.Cells(NumRows - 2, NumColumns + 
1).Address & ")" 
+0

我試過你的建議,但我仍然收到運行時錯誤。這裏是我已經嘗試過:對於Rows1 = 6到Lrow1 表(4).Cells(Rows1,3).Formula =「= IF(ISERROR(VLOOKUP(RC [7],Sheet2!R4C2:R」&Lrow2& 「C2,1,FALSE)),RC [7],HYPERLINK(CELL(」&「,」address「」「&」,INDEX(Sheet2!R4C2:「&」R「&Lrow2&」C2,MATCH(RC [7],Sheet2!R4C2:「&」R「&Lrow2&」C2,0))),RC [7]))「 Next Row1 – 2015-03-25 06:53:21

+1

是的,如果指定了行和列,請嘗試使用.FormulaR1C1。在上面的代碼中,我可以發現一個錯誤代碼表(4).Cells(Rows1,3).Formula其中tag ** bold ** Rows1無效。只需使用「代碼」表(4).Cells(1,3)。驗證,在代碼執行後,您能否看到公式出現在第1行第3列中。 – 2015-03-25 23:25:17

+0

謝謝。 @Manivannan KG – 2015-03-30 09:05:04

0

除了範圍,你需要使用.FormulaR1C1財產,如果你打算使用R1C1引用:

Sheets(4).Range("A7").FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[7],Sheet2!R4C2:R" & Lrow2 & "C2,1,FALSE)),RC[7],HYPERLINK(CELL(""address"",INDEX(Sheet2!R4C2:R" & Lrow2 & "C2,MATCH(RC[7],Sheet2!R4C2:R" & Lrow2 & "C2,0))),RC[7]))"