计算多个工作表中的多个列匹配项(例如:名字和姓氏)

时间:2018-07-23 20:59:43

标签: google-sheets

需要计算多张纸中姓名(COL1 + COL2)的出现次数。

示例数据结构:

  {Sheet1}          {Sheet2}          {Sheet3}
-------------     -------------     -------------
COL1  COL2        COL1  COL2        COL1  COL2
----  ----        ----  ----        ----  ----   
Jim   Smith       Jim   Smith       Burt  Malone
Dana  Brown       Jill  White       Jim   Smith
Jane  Doe         Dana  Brown       Dana  Brown
Jane  Johnson     Angie Wild        Jill  White
Burt  Malone      Tim   Peterson 

预期结果:

NAME        COUNT
----------  ----- 
Angie Wild    1
Burt Malone   2
Dana Brown    3
Jane Doe      1
Jane Johnson  1
Jill White    2
Jim Smith     2
Tim Peterson  1

2 个答案:

答案 0 :(得分:0)

唯一键将非常有用,不仅可以解决您的直接问题,而且很有可能避免其他问题。仅将两列串联即可提供这一点(对于示例数据,不一定是其他情况,因此我建议使用更健壮的索引系统)。有了这样的键,在每张工作表的ColumnI中说,可以使用如下公式:

=query({Sheet1!I1:I11;Sheet2!I1:I11;Sheet3!I1:I11},"SELECT Col1, count(Col1) WHERE Col1 IS NOT null group by Col1")

以上要求使用此类术语:Sheet3!I1:I11用于每张纸。

答案 1 :(得分:0)

以下是一个示例脚本,用于执行相同操作:

//@OnlyCurrentDoc
function countUnique() {
  var ss = SpreadsheetApp.getActive();
  var sheets = ss.getSheets(); //get All Sheets
  var input = {},output=[];
  for (var i in sheets){ //Loop through all sheets for A:B column values
    var values = sheets[i].getRange("A1:B"+sheets[i].getLastRow()).getValues();
    values.forEach(function(e){
      var a = (e[0]+' '+e[1]).trim(); // create unique property name with A&B
      if (a){
        input[a] = input[a]+1 || 1; //increment count of  name for each occurence    
      }
    });
    //Logger.log(input);
  }
  var output = Object.keys(input).map(function(e){return [e,input[e]]}); //Convert it back to array     
  //Logger.log(output);
  sheets[0].getRange(sheets[0].getLastRow()+1,1, output.length,output[0].length).setValues(output); //set the output values to Sheet1 Last Row    
}