目前,我有一张工作表,其中每行有大约20个单元格,我使用LOOKUP进行评估。如果行不是空的,我从参考行中获取一个值。如果它为空,我将0指定为其值,以避免返回#N / A.
一旦我评估了20行中的每一行,我想然后对所有行进行SUM。虽然我有一个有效的公式,但它很可怕:
=SUM(IFERROR(LOOKUP("X",H2,H91),0) + IFERROR(LOOKUP("X",I2,I91),0)
+ IFERROR(LOOKUP("X",J2,J91),0) + IFERROR(LOOKUP("X",K2,K91),0)
+ IFERROR(LOOKUP("X",L2,L91),0) + IFERROR(LOOKUP("X",M2,M91),0)
+ IFERROR(LOOKUP("X",N2,N91),0) + IFERROR(LOOKUP("X",O2,O91),0)
+ IFERROR(LOOKUP("X",P2,P91),0) + IFERROR(LOOKUP("X",Q2,Q91),0)
+ IFERROR(LOOKUP("X",R2,R91),0) + IFERROR(LOOKUP("X",S2,S91),0)
+ IFERROR(LOOKUP("X",T2,T91),0) + IFERROR(LOOKUP("X",U2,U91),0)
+ IFERROR(LOOKUP("X",V2,V91),0) + IFERROR(LOOKUP("X",W2,W91),0)
+ IFERROR(LOOKUP("X",X2,X91),0) + IFERROR(LOOKUP("X",Y2,Y91),0)
+ IFERROR(LOOKUP("X",Z2,Z91),0) + IFERROR(LOOKUP("X",AA2,AA91),0)
+ IFERROR(LOOKUP("X",AB2,AB91),0))
完整的示例是here:
参见公式Y2到Y87的单元格。
我知道必须有更优雅的方式来做到这一点,但是,我的Google Sheet技巧充其量只是新手。
提前感谢任何建议!
答案 0 :(得分:0)
您可以使用SUMPRODUCT:
$myArray = [
'images' => ['g','hp'],
'g' => ['menu','submenu','icons'],
'hp' => ['cat', 'icons', 'banners'],
'menu' => ['v1',],
'submenu' => ['img','icons'],
'icons' => ['v1'],
'cat' => ['kt','hk','bm','w','m','at','e'],
'banners' => ['v1'],
'img' => ['e'],
'kt' => ['v1',],
'hk' => ['v1',],
'bm' => ['v1',],
'w' => ['v1',],
'm' => ['v1',],
'at' => ['v1',],
'e' => ['v1',],
];
function getPath($array, $key, $path, &$returnArray) {
if(isset($array[$key]))
{
foreach($array[$key] as $v) {
$newPath = $path.$v.'/';
$nextPath = getPath($array, $v, $newPath, $returnArray);
if(!empty($nextPath))
{
$returnArray[] = $nextPath;
}
}
} else {
return $path;
}
}
$allPaths = array();
getPath($myArray, 'images', '', $allPaths);
echo "<pre>";print_r($allPaths);echo "</pre>";
或者说更简单的SUMIF()
Array
(
[0] => g/menu/v1/
[1] => g/submenu/img/e/v1/
[2] => g/submenu/icons/v1/
[3] => g/icons/v1/
[4] => hp/cat/kt/v1/
[5] => hp/cat/hk/v1/
[6] => hp/cat/bm/v1/
[7] => hp/cat/w/v1/
[8] => hp/cat/m/v1/
[9] => hp/cat/at/v1/
[10] => hp/cat/e/v1/
[11] => hp/icons/v1/
[12] => hp/banners/v1/
)