按条件统计数组元素个数

countif函数第一个参数必须是单元格引用。废了九牛二虎之力吭哧出一个函数。第一个参数可以是常量数组或动态数组。

function COUNTIFA(array,conditions){

console.clear();

let typeof1 = Object.prototype.toString.call(array);

let typeof2 = Object.prototype.toString.call(conditions);

if (typeof1 === "[object Object]" && typeof2 === "[object Object]" ){

let array_address = array.Address();

let conditions_address = conditions.Address();

return Application.Evaluate(`COUNTIF(${array_address},${conditions_address})`) //可以注释掉 //下面的判断写法有点复杂,慢慢优化吧。

}

console.log("typeof1:"+ typeof1 + "typeof2:" + typeof2);

let array_array = [[]];

let conditions_array = [[]];

if (typeof1 === "[object Object]"){

array_array = array.Value2;

console.log("1a "+JSON.stringify(array_array))

if(!Array.isArray(array_array)){

array_array = [[array_array]];

}else{

if(!Array.isArray(array_array[0])){

array_array = [array_array];

}

}

}else{

if (typeof1 === "[object Array]"){

if(Array.isArray(array[0])){

array_array = array;

}else{

console.log(JSON.stringify(array))

array_array[0]=array;

}

}else{

array_array[0].push(array);

}

}

if ( typeof2 === "[object Object]" ){

conditions_array = conditions.Value2;

console.log("2a "+JSON.stringify(conditions_array))

if(!Array.isArray(conditions_array)){

conditions_array = [[conditions_array]];

}else{

if(!Array.isArray(conditions_array[0])){

conditions_array = [conditions_array];

}

}

}else{

if ( typeof2 === "[object Array]" ){

if(Array.isArray(conditions[0])){

conditions_array = conditions;

}else{

console.log(JSON.stringify(conditions))

conditions_array[0]=conditions;

}

}else{

console.log(5)

conditions_array[0].push(conditions);

}

}

let conditions_rlength = conditions_clength = array_array_rlength = array_array_clength = 0;

if( Array.isArray(conditions_array[0])){

console.log("a");

conditions_rlength = conditions_array.length;

conditions_clength = conditions_array[0].length;

}else{

console.log("b");

conditions_clength = conditions_array.length;

conditions_rlength = 1;

}

if( Array.isArray(array_array[0])){

console.log("c");

array_array_rlength = array_array.length;

array_array_clength = array_array[0].length;

}else{

console.log("d");

array_array_clength = array_array.length;

array_array_rlength = 1;

}

console.log("查找值数组行数:" + conditions_rlength, "列数:" + conditions_clength)

console.log("被找区域数组行数:" + array_array_rlength, "列数:" + array_array_clength);

let result_array = Array(conditions_rlength).fill().map(()=>Array(conditions_clength));

console.log("结果计数数组 初值:"+JSON.stringify(result_array))

typeof1 = Object.prototype.toString.call(array_array);

typeof2 = Object.prototype.toString.call(conditions_array);

console.log("typeof1:"+ typeof1 + "typeof2:" + typeof2);

console.log("conditions_array " + JSON.stringify(conditions_array));

console.log("array_array " + JSON.stringify(array_array));

for(var i=0;i<conditions_rlength;i++){

for(var j=0;j<conditions_clength;j++){

let counter = 0;

for(var m=0;m<array_array_rlength;m++){

console.log("array_array[m]:" + JSON.stringify(array_array[m]));

let findindex = 0;

if(Array.isArray(array_array[m])){

if(Array.isArray(conditions_array[i])){

console.log("i:"+i+",j:"+j+"conditions_array[i][j]:" +conditions_array[i][j]+"WDK" );

while(findindex!=-1){

findindex = array_array[m].indexOf(conditions_array[i][j],findindex)

if(findindex>=0){

findindex++;

counter++;

}

console.log("0-findindex"+findindex);

}

}else{

console.log("i:"+i+",j:"+j+"conditions_array[i]:" +conditions_array[i]+"WDK" );

while(findindex!=-1){

findindex = array_array[m].indexOf(conditions_array[i],findindex);

if(findindex>=0){

findindex++;

counter++;

}

console.log("1-findindex"+findindex);

}

}

}else{

//以下是基本没什么用的代码

if(Array.isArray(conditions_array[i])){

console.log("i:"+i+",j:"+j+"conditions_array[i][j]:" +conditions_array[i][j]+"WDK" );

while(findindex!=-1){

findindex = array_array.indexOf(conditions_array[i][j],findindex)

if(findindex>=0){

findindex++;

counter++;

}

console.log("3-findindex"+findindex);

}

}else{

console.log("i:"+i+",j:"+j+"conditions_array[i]:" +conditions_array[i]+"WDK" );

while(findindex!=-1){

findindex = array_array.indexOf(conditions_array[i],findindex);

if(findindex>=0){

findindex++;

counter++;

}

console.log("4-findindex"+findindex);

}

}

}

}

console.log("counter:" +counter)

result_array[i][j]=counter;

}

}

return result_array;

}

黑龙江省
浏览 197
收藏
5
分享
5 +1
2
+1
全部评论 2
 
恰同学少年
上次代码,没粘贴完整,当时没注意到,重新粘贴了,同时加了一个判断。
· 黑龙江省
回复
 
HC.旋
点赞支持
· 福建省
回复