通过VBA运行Excel公式

问题描述:

我想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

只是你犯了一个小错误。

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

除了范围,你需要使用.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]))"