计算列中的出现次数

时间:2020-06-08 01:56:19

标签: google-apps-script google-sheets

示例(输入了A列,将自动生成B和C列):

|   A   |   B   |   C   |
+-------+-------+-------+
| Name  | Name  | Count |
+-------+-------+-------+
| Joe   | Joe   |     2 |
| Lisa  | Lisa  |     3 |
| Jenny | Jenny |     2 |
| Lisa  |       |       |
| Lisa  |       |       |
| Joe   |       |       |
| Jenny |       |       |

我知道我可以使用下面的功能来做到这一点。但是,我想使用应用程序脚本来实现。我已经尝试将嵌套2的循环称为(ij)。以ij开头的位置开始计数,直到与i不匹配为止。然后j等于i,所以i只是跳到新的起点,而不是重复计数,这有点奏效。

我一直遇到一个问题,即在最近的2次迭代中它会输出大量的数字...我认为在无法使脚本正常工作之后我没有保存脚本。任何想法或帮助将不胜感激。

我想编写脚本的公式:

=ArrayFormula(QUERY(A1:A16&{"",""},"select Col1, count(Col2) where Col1 != '' group by Col1 label count(Col2) 'Count'",1))

1 个答案:

答案 0 :(得分:1)

尝试一下:

它将读取带有标题的A列,并生成带有标题的B和C

function pv() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  const vs=rg.getValues();
  let Obj={pA:[]};
  vs.forEach(function(r,i){
    if(!Obj.hasOwnProperty(r[0])) {
      Obj[r[0]]=1;
      Obj.pA.push(r[0]);
    }else{
      Obj[r[0]]+=1;
    }
  });
  let oA=[["Name","Count"]];
  Obj.pA.forEach(function(p) {
    oA.push([p,Obj[p]]);
  });
  sh.getRange(1,2,oA.length,2).setValues(oA);
}

这是一个简单的数据透视表

相关问题