如何使用变量中的R1C1表示法在单元格中设置公式?

时间:2015-12-16 15:15:54

标签: excel vba excel-vba

我有一系列IF / ELSE子句,看看项目是否适合三个类别中的一个。如果某个项目不适合其中任何一项,则其类别字段应为“SELECT”。

现在,使用简单的文本字符串,它可以正常工作。但是我还想在一个空行中包含一个简单的公式(如在工作表中的大多数其他自动填充字段中)来清空该字段。基于我在其他情况下使用的代码,我想将单元格的公式设置为

=IF(ISBLANK($A2, "", "SELECT")

(......细胞本身就是B2)

问题是,要查看的单元格取决于它所在的行; A2,A3,A4等。列号保持不变,但行号由变量iImportCounter定义。

我已经尝试了.Value.Formula"""Chr(34),但它似乎仍无效。该行的完整代码是

Else:
    wsCalc.Cells(iImportCounter, 3).Formula = "=IF(ISBLANK($" & Application.ConvertFormula(Cells(iImportCounter, 2), xlA1) & ", " & Chr(34) & Chr(34) & ", " & Chr(34) & "SELECT" & Chr(34) & ")"

有什么东西非常明显我不见了吗?

我在其他地方看到的评论说,它在模块中而不是基于工作表的宏可能会使某些代码出现故障,但我不确定是什么或如何。

2 个答案:

答案 0 :(得分:3)

这取决于iImportCounter的起始位置。如果 3 (B3中的第3行)则公式为

with wsCalc.Cells(iImportCounter, 3)
    .FormulaR1C1 = "=IF(ISBLANK(R[-1]C1), """", ""SELECT"")
end with

RC1 中的 R 表示您将公式放在同一行上,如果您要放置第2行并且想要引用A2,那么 R 就是您所需要的。如果公式进入B3,则需要使用 R [-1] C1 引用当前行减1。

RC1 中的 C1 表示“锁定”(绝对)列A(第一个列) 。这似乎不是绝对必要的,因为公式不会横向移动。

答案 1 :(得分:1)

假设[["A button"], ["B button"]] 是对一系列单元格的引用:

wsCalc

作为一个工作示例:

wscalc.FormulaR1C1 = "=IF(ISBLANK(RC1),"""",""SELECT"")"