excelvba中的公式问题
我在尝试使用不特定的相对值填充值时遇到了一些问题 这是工作的原样,但我需要能够做一个相对细胞匹配。我尝试将单词Formula1改为FormulaR1C1,并尝试使用R2C3而不是B3,但这不起作用 我的想法是,如果我使用公式1C1,我可以使用R[1]。。。。指定需要匹配的单元格 x是我已经找到的一行。现在是第2行,它给出x=2。 categoryColumn和CategoryStart是工作表中定义的命名范围。 这个公式的存在是为了填充一个依赖的下拉列表,正如所说的,它按原样工作,但不按我需要的方式工作excelvba中的公式问题,vba,excel,Vba,Excel,我在尝试使用不特定的相对值填充值时遇到了一些问题 这是工作的原样,但我需要能够做一个相对细胞匹配。我尝试将单词Formula1改为FormulaR1C1,并尝试使用R2C3而不是B3,但这不起作用 我的想法是,如果我使用公式1C1,我可以使用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
我建议如下:
将字符串Formula1R1C1
设置为行和列的公式,例如
FormulaR1C1="=SUM(R1C1:R4C4)"
(举个例子)
那就做吧
Formula1:=Application.Evaluate(Application.ConvertFormula(FormulaR1C1, xlR1C1, xlA1))
通过这种方式,您可以根据相对引用编写公式,然后将其转换为绝对引用,以便在代码中使用(您说它与绝对引用一起工作)我建议如下:
将字符串Formula1R1C1
设置为行和列的公式,例如
FormulaR1C1="=SUM(R1C1:R4C4)"
(举个例子)
那就做吧
Formula1:=Application.Evaluate(Application.ConvertFormula(FormulaR1C1, xlR1C1, xlA1))
通过这种方式,您可以根据相对引用编写公式,然后将其转换为绝对引用,以便在代码中使用(您说绝对引用确实有效)您可能需要稍微处理一下,但我认为这应该有效。其思想是使公式字符串动态,以便它随着行的变化而变化,对吗?另一种可能的方法是在连接到字符串后保存所需的公式,并以这种方式插入
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
你可能需要玩一点,但我认为这应该管用。其思想是使公式字符串动态,以便它随着行的变化而变化,对吗?另一种可能的方法是在连接到字符串后保存所需的公式,并以这种方式插入
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
是的,我没有包括的那行在a列中查找一个单词,当它发现这个单词时,它会在下面插入一行,然后需要添加一些下拉列表。你的代码几乎成功了,我通过将
…B“&x+1&”,Ca…
更改为…B“&(x+1)&”,Ca…
来实现它。谢谢。是的,我没有包含的行在a列中查找一个单词,当它发现该单词时,会在下面插入一行,然后需要添加一些下拉列表。你的代码几乎成功了,我通过将…B“&x+1&”,Ca…
更改为…B“&(x+1)&”,Ca…
来实现它。谢谢。是的,我没有包含的行在a列中查找一个单词,当它发现该单词时,会在下面插入一行,然后需要添加一些下拉列表。您的代码几乎正常工作了,我通过将…B“&x+1&”,Ca…
更改为…B“&(x+1)&”,Ca…
使其正常工作,谢谢。