Excel VBA中的公式问题

时间:2015-06-17 15:39:48

标签: excel vba excel-vba

我在尝试使用非特定的相对值填充值时遇到了一些问题。

这是按原样工作的,但我需要能够进行相对单元格匹配。我试图将Formula1更改为FormulaR1C1并尝试使用R2C3而不是B3,但这不起作用。

我的想法是,如果我使用FormulaR1C1,我可以使用R [1] ....来指定我需要匹配的单元格。

x是我已经找到的一行。此时它是第2行,它给出x = 2。 categoryColumn和CategoryStart是工作表中定义的命名范围。 这个公式用于填充依赖的下拉列表,并且正如所说的那样工作,但不起作用我需要它如何工作。

With Cells(x + 1, 3).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=OFFSET(CategoryStart,MATCH(B3,CategoryColumn,0),1,COUNTIF(CategoryColumn,B3),1)"
    .InCellDropdown = True
End With

2 个答案:

答案 0 :(得分:0)

我建议如下: 将字符串Formula1R1C1设置为行和列的公式,例如

FormulaR1C1="=SUM(R1C1:R4C4)" 

(仅作为示例)

然后做

Formula1:=Application.Evaluate(Application.ConvertFormula(FormulaR1C1, xlR1C1, xlA1))

通过这种方式,您可以根据相对引用编写公式,然后将其转换为绝对引用,以便在您的代码中使用(您说它确实有效)绝对参考)

答案 1 :(得分:0)

你可能不得不玩这个但我认为这应该有效。我的想法是使公式字符串动态化,以便随着行的变化而改变,对吗?另一种可能的方法是在连接成字符串后保存预期的公式并以这种方式插入。

With Cells(x + 1, 3).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=OFFSET(CategoryStart,MATCH(B" & (x + 1) & ",CategoryColumn,0),1,COUNTIF(CategoryColumn,B" & x+1 & "),1)"
    .InCellDropdown = True
End With