我有一个信息表,我想创建一个函数,它会在表格范围内找到与我提供的标题匹配的两列,然后将两列的每一行之间的差异存储为阵列。获取此数组后,我希望函数返回数组的平均值,最大值和最小值。输出将是水平的,并放置在3个相邻的单元格中。
我不是手动执行此操作,因为表非常大,我必须得到两行的许多排列(435个排列)的差异和平均值,因此手动计算会太繁琐。
public function index()
{
$assets = $this->Assets->find('all')
->select([ 'id', 'name', 'serial'])
->contain(['ExternalAssets' => [
'fields' => [
'NAME','SERIAL'
]
]);
//if you wanna paginate your resut
//$assets = $this->paginate($assets);
$this->set(compact('assets'));
$this->set('_serialize', ['assets']);
}
public function view($id = null)
{
$assets= $this->Assets->get($id, [
'contain' => []
]);
$this->set('assets', $assets);
$this->set('_serialize', ['assets']);
}
这是我尝试过的,但它返回了无效的名称错误。我是vba的新手(只使用过python和R),真的需要一些帮助。提前谢谢!
答案 0 :(得分:1)
不需要VBA。
如果headers
是表示标题标签的范围,data
表示数据的范围(不包括标题行),那么
=INDEX(data,0,MATCH(header1,headers,0))
提供了一个数组,该数组对应于标有header1
的数据表的列。
因此,您的最大值,最小值和平均值可以简单地获得
=MAX(INDEX(data,0,MATCH(header1,headers,0))-INDEX(data,0,MATCH(header2,headers,0)))
=MIN(INDEX(data,0,MATCH(header1,headers,0))-INDEX(data,0,MATCH(header2,headers,0)))
=AVERAGE(INDEX(data,0,MATCH(header1,headers,0))-INDEX(data,0,MATCH(header2,headers,0)))
其中header1
和header2
是您选择的两个标题标签。
在从公式栏提交时,每个公式都需要使用CTL+SHIFT+ENTER
作为数组公式输入,而不仅仅是ENTER
。然后公式将出现在公式栏中的花括号{...}
内,确认它是一个数组公式。
由于您有435个排列,我猜测您的数据表有30列。
如果您愿意,可以轻松生成所有435种可能排列的结果。
为此,请创建一个包含435对(n,m)
的列表,以使n
小于m
且n
,m
均在范围1内, ...,30。创建从(1,2)
开始到(29,30)
结束的列表。现在MATCH(header1,headers,0)
和MATCH(header2,headers,0)
可以简单地用n
和m
替换,分别在公式中给出
=MAX(INDEX(data,0,n)-INDEX(data,0,m))
=MIN(INDEX(data,0,n)-INDEX(data,0,m))
=AVERAGE(INDEX(data,0,n)-INDEX(data,0,m))
作为对(n,m)
的必需结果,同样应将这些公式作为数组公式输入CTL+SHIFT+ENTER
。