如果有人知道以下问题是否已记录和/或潜在原因是什么,我将不胜感激。
例如,假设我们有A1:A10
中1到10的数字,则下面的公式
=SUMPRODUCT(SUBTOTAL(4,OFFSET(A1,{0;5},0,5)))
是完全有效的,并且等效于从A1:A5
和A6:A10
每个范围取最大值的总和,因为OFFSET
函数在此处传递了一个值数组({0;5}
作为其 rows 参数并具有适当的 height 参数(5),解析为范围数组:
{A1:A5,A6:A10}
然后将其传递给SUBTOTAL
,以生成另一个数组,其中包含来自这些范围(即5和10)中的最大值,然后再与SUMPRODUCT
相加。
AGGREGATE
是在Excel 2010中引入的,似乎是SUBTOTAL
的更完善的版本。我的问题是,为什么在尝试以下操作
=SUMPRODUCT(AGGREGATE(14,,OFFSET(A1,{0;5},0,5),1))
应该等同于上面给出的SUBTOTAL
示例,但Excel会显示以下消息:“ 试图计算一个或多个公式时,资源不足了”(并返回一个值0)?
( 请注意,非英语版本的Excel的用户可能需要在数组常量{0;5}
中使用不同的分隔符。 )
这是一个非常意外的错误。显然,语法不是错误的,OFFSET
构造的传递也不是“不允许的”。在工作簿中没有其他内容的情况下,是什么导致Excel在尝试解决这种构造时使用了如此多的资源?
INDIRECT
而不是OFFSET
发生了类似的结果,即
=SUMPRODUCT(SUBTOTAL(4,INDIRECT({"A1:A5","A6:A10"})))
完全有效
=SUMPRODUCT(AGGREGATE(14,,INDIRECT({"A1:A5","A6:A10"}),1))
与上述错误相同。
致谢
答案 0 :(得分:2)
答案 1 :(得分:1)
AGGREGATE错误似乎是由于将范围引用数组传递给期望值数组的参数而引起的。该错误消息具有传递统一指针的症状,从而导致意外行为。实际上,显示了相同的错误对话框以及其他一些功能,例如:
let prevCardiacIntervPickerView = UIPickerView()
prevCardiacIntervPickerView.delegate = self
prevCardiacIntervPickerView.tag = 1
prevCardiacIntervPickerField.inputView = prevCardiacIntervPickerView
var prevCardiacIntervPickerOption = ["Yes, surgery", "Yes, PCI <6h ago", "Yes, PCI >6h ago", "No"]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView.tag == 1 {
return prevCardiacIntervPickerOption.count
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView.tag == 1 {
return prevCardiacIntervPickerOption[row]
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 1 {
prevCardiacIntervPickerField.text = prevCardiacIntervPickerOption[row]
}
}
另一方面,允许将引用数组传递给AGGREGATE的第四个或更高版本的参数,例如:
//this is the constructor
public EfGiacenzeRepo(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
//this is the method
using (_aspContext = _serviceProvider.GetService<aspContext>())
{
listaGiacenze = _aspContext.TabGiacenza.ToList();
}
以类似的方式,SUBTOTAL允许第二个或更高版本参数中的引用数组,而这些引用都不是本地数组。通过将函数应用于数组中的每个范围引用来评估SUBTOTAL公式,即:
=MEDIAN(TRANSPOSE(INDIRECT({"a1:a5","a6:a10"})))
在函数定义中格式化数组和范围引用可能有助于可视化公式处理:
AGGREGATE(function_num,options, array or ref1 ,[ k or ref2 ],[ ref3 ] ,…)
SUBTOTAL(function_num, ref1 ,[ ref2 ],...)
请注意,仅 reference 参数也允许引用数组。
有趣的是,当前Office 365预览版中的更新的计算引擎和动态数组是否对此行为进行了任何更改,并且即将发布...