无法以编程方式计算Excel数组公式

时间:2012-09-21 19:14:42

标签: excel excel-formula array-formulas

我正在使用MATLAB程序在excel表中写入值。我也在使用公式在单元格中写入值(例如,MATLAB程序将=AVERAGE(A1:A10)写入单元格,并将其转换为适当的值(即,当我打开工作表时,我看不到上面的公式文本,而是价值)。

但是我在编写数组公式时遇到了麻烦(有花括号的公式)。通常用户通过按 Ctrl + Shift + Enter 组合来输入它们,出现花括号并计算适当的值。但是当我用MATLAB程序编写用大括号括起来的公式时,不计算值,我只看到公式文本(用花括号围绕它)。
似乎我无法通过简单地将数组公式写入单元格来模拟 Ctrl + Shift + 输入效果。

有没有解决方案?

1 个答案:

答案 0 :(得分:5)

Excel会自动将以=开头的值转换为.formulas。 要保存数组公式,您需要直接写入范围的FormulaArray属性。

更多详情:

如果您使用的是普通公式,那么您在VBA中有两个选项。您可以像这样设置单元格的值或公式属性:

Range("A3").value = "=Sum(A1:A2)"
Range("A3").Formula= "=Sum(A1:A2)" 

使用数组公式时,您无法使用这些方法中的任何一种,您需要将其存储到单元格的不同区域:

Range("A3").FormulaArray = "=Sum(A1:A2)"

当用户按 Ctrl + Shift + Enter 时,他们告诉excel将单元格的.value发送到。FormulaArray部分的单元格。

否则,默认情况下,当Excel看到=符号时,我会将.value分配到.formula

无论如何,这都是excel对象模型的相对,即使它在VBA中。

现在我已经深入研究了这个细节,我相信matlab的xlswrite函数只写入单元格的值,并且不能写入这个子属性,我可能错了。

这可能在MATLAB中有用(未经测试)

mlrange='A3'; % or similar

Excel = actxserver ('Excel.Application');
Excel.Workbooks.Open(filename);
TargetSheet = get(Excel.sheets,'item','A');
TargetSheet.Activate
ran = Excel.Activesheet.get('Range',mlrange);
ran.FormulaArray = '=Sum(A1:A2)'