Excel VBA应该运行excel函数 – 右键

我想把下面的代码放入一个vba中就像一个函数一样。 有一堆VBA已经创build的数据,当VBA做它的工作,然后下面的函数应该运行,但我不知道如何添加到我的VBA,使该函数始终运行,只要数据包含。 我创build的macros已经把数据表放在了一起,而不是用lenthy编码创build下面,我只想让我的macros运行下面,就像一个男人点击包含下面的函数的单元格的右下angular。 它应该是:Activesheet.ForulaR1C1 =“= RIGHT(AY4,LEN(AY4)-FIND(”。“,AY4))”的东西。 有人能帮我吗? 谢谢

(AY4,LEN(AY4)-FIND(“。”,AY4))“的原始function”

这是我现在所在的地方:

Sub Project_numbers() Dim j As Integer Zorro = Range("AY" & Rows.Count).End(xlUp).Row o = 4 Worksheets("MJE").Range("AF" & o).FormulaR1C1 = "=RIGHT(AE4,LEN(AE4)-FIND(".",AE4))" o = o + 1 End Sub 

这里有几个问题。 最大的是你的公式中有引号。 VBA读取这些作为string的结尾,所以它将您的公式解释为两个单独的文本string: =Right(AE4,LEN(AE4)-FIND(,AE4)) ,用a分隔. 。 这不是一个结构VBA可以做任何事情,所以它会在这一点上失败。

当您使用包含引号的VBA插入公式时,您需要一起使用两个引号,以指示它是一个字面引号,它是string的一部分,而不是string的结尾:

 "=RIGHT(AE4,LEN(AE4)-FIND(""."",AE4))" 

第二个问题是您使用的是FormulaR1C1方法,它需要在R1C1(行#列#)符号中给出单元格引用,而不是A1符号,但是会传递一个使用A1符号的公式。 再次,这会混淆这个问题,并产生错误。

我猜你用macroslogging器来获取语法,然后插入你自己的公式? macroslogging器出于某种奇怪的原因,喜欢使用R1C1引用风格,但是我们可以使用不同的方法来编写代码。

您需要的全部行是:

 Worksheets("MJE").Range("AF" & o).Formula = "=RIGHT(AE4,LEN(AE4)-FIND(""."",AE4))" 

编辑添加:

随着进一步的信息,特别是你需要引用的范围改变循环,你有一些select如何做到这一点。

1.使用R1C1参考样式

这使您可以轻松地在公式中包含相对引用。 您将使用R指定公式的行,并使用C来指定其列; 所以一个自称的单元就是=RC 。 你可以按照R和C的数字来指定特定的行和列,所以单元格B2将是=R2C2 – 第2行,第2列。更有用的是,你可以使用=R[#]C[#]来抵消你的公式一定数量。

在你的公式中,假设它总是看着列AE,但是input公式的那一行,你的行将是:

 Worksheets("MJE").Range("AF" & o).FormulaR1C1 = "=RIGHT(RC31,LEN(RC31)-Find(""."",RC31))" 

2.从variablesbuild立你的公式。

你已经有了一个你可以使用的variableso ,所以我们可以把它和string的其余部分结合起来得到相应的引用。 虽然…读起来很难

 Worksheets("MJE").Range("AF" & o).Formula = "=RIGHT(AE" & o & ",LEN(AE" & o & ") - FIND(""."",AE" & o & "))" 

就我个人而言,我发现这种方法相当麻烦,但它是一个选项。

3.将公式作为单个操作分配给整个范围

就我个人而言,我更喜欢这个select; 我觉得它是最好的。 我假设你的数据是从第4行开始的,而且你希望公式进入到AE4和存储在Zorro中的数据结束之间的每个单元格中。 您可以使用此行一次性添加公式:

 Worksheets("MJE").Range("AF4","AF" & Zorro).Formula = "=RIGHT(AE4,LEN(AE4)-FIND(""."",AE4))" 

单元格引用将自动更新每一行。 这种方法不需要循环 – 当然,如果你循环,这可能不是很大的节约。