Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excelvba中的公式问题_Vba_Excel - Fatal编程技术网

excelvba中的公式问题

excelvba中的公式问题,vba,excel,Vba,Excel,我在尝试使用不特定的相对值填充值时遇到了一些问题 这是工作的原样,但我需要能够做一个相对细胞匹配。我尝试将单词Formula1改为FormulaR1C1,并尝试使用R2C3而不是B3,但这不起作用 我的想法是,如果我使用公式1C1,我可以使用R[1]。。。。指定需要匹配的单元格 x是我已经找到的一行。现在是第2行,它给出x=2。 categoryColumn和CategoryStart是工作表中定义的命名范围。 这个公式的存在是为了填充一个依赖的下拉列表,正如所说的,它按原样工作,但不按我需要的

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

这是工作的原样,但我需要能够做一个相对细胞匹配。我尝试将单词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…
使其正常工作,谢谢。