编辑:Chronocidal的解决方案非常有帮助。我实现了它,它就像一个魅力。感谢您的所有帮助。罗恩·赖森菲尔德(Ron Reisenfeld)和EvR的讲话也提供了很多帮助,并向我指示了正确的方向
有人可以用我要使用Formula.local函数插入某些单元格的数组公式帮助我吗?公式中可能有些不正确的内容,但我只是找不到原因……如果有人可以测试它会很有帮助,因为我只有德文版的excel,而且可能我监督了任何语言的特定原因。我附加了一个文件来测试公式(xlsx)
如果我进行debug.print,则公式如下:
=(PRODUCT(IF(Daten!B1:B12353=SMALL(IF((Daten!B1:B12353>=$C$25),Daten!B1:B12353,999999),1),Daten!A1:A12353-SUM(0,0),1),IF((Daten!B1:B12353>SMALL(IF((Daten!B1:B12353>=$C$25),Daten!B1:B12353),1))*((Daten!B1:B12353<=$D$33)),Daten!A1:A12353,1))^(1/(DAYS360($C$25,$D$33)/360))-1)*100
我在此示例工作簿中使用了公式:https://drive.google.com/open?id=1xCth5vo6G82lNDsclbj3FpUfYzvXsuEJ
在VBA中,公式由许多变量组成,这些变量是:
[edit] b =我想在公式[/ edit]中查看的范围的最后一行
Daten!B1:B“&b =日期行
sh_Ov.Cells(int_Ende + 1,Int_links).Address =最新日期
sh_Ov.Cells(int_Start,3).Address =最早的日期(但不一定在日期行中–这就是为什么我使用“小”公式)
Daten!A1:A“&b =我要计算乘积的数字
ThisWorkbook.Sheets(1).Cells(x,y).FormulaArray = "=(PRODUCT(IF(Daten!B1:B" & b & "=SMALL(IF((Daten!B1:B" & b & ">=" & sh_Ov.Cells(int_Start, 3).Address & "),Daten!B1:B" & b & ",999999),1),Daten!A1:A" & b & "-SUM(0,0),1),IF((Daten!B1:B" & b & ">SMALL(IF((Daten!B1:B" & b & ">=" & sh_Ov.Cells(int_Start, 3).Address & "),Daten!B1:B" & b & "),1))*((Daten!B1:B" & b & "<=" & sh_Ov.Cells(int_Ende + 1, Int_links).Address & ")),Daten!A1:A" & b & ",1))^(1/(DAYS360(" & sh_Ov.Cells(int_Start, 3).Address & "," & sh_Ov.Cells(int_Ende + 1, Int_links).Address & ")/360))-1)*100"
如果任何人都可以看一下,那就太好了。到目前为止,我找不到原因
最好的问候 詹斯
答案 0 :(得分:1)
您的公式超过255个字符,因此无法直接通过VBA输入。
要么将其更改为较短的名称(例如使用EvR suggests之类的命名范围),要么使用(技术上有效的)伪代码,然后将其替换为Range.Replace
,像这样:
With ThisWorkbook.Worksheets(1).Cells(x,y) 'Worksheets instead of Sheets will exclude Chart Sheets
'214 Characters
.FormulaArray = "=(PRODUCT(IF(MAX(1)=SMALL(IF((MAX(1)>=" & sh_Ov.Cells(int_Start, 3).Address & "),MAX(1),999999),1),Daten!A1:A" & b & "-SUM(0,0),1),IF((MAX(1)>SMALL(IF((MAX(1)>=" & sh_Ov.Cells(int_Start, 3).Address & "),MAX(1)),1))*((MAX(1)<=" & sh_Ov.Cells(int_Ende + 1, Int_links).Address & ")),Daten!A1:A" & b & ",1))^(1/(DAYS360(" & sh_Ov.Cells(int_Start, 3).Address & "," & sh_Ov.Cells(int_Ende + 1, Int_links).Address & ")/360))-1)*100"
'Swap all instances of MAX(1) for your range in the Daten sheet
.Replace("MAX(1)", "Daten!B1:B" & b, LookAt:=xlPart)
End With
答案 1 :(得分:0)
将数组公式缩短为255个字符(借助已定义的名称),然后重试。 (您超过了最大长度)
https://docs.microsoft.com/en-us/office/vba/api/excel.range.formulaarray