将一列拆分/转置为多行和多列

时间:2016-09-27 17:57:06

标签: split google-sheets transpose

在Google表格上创建了​​一个用于视频游戏的表单,以便跟踪参与群组活动的情况。我希望将C列中的数据拆分并转换为多列,但是我无法找到一个不需要我自己手动扩展列中公式的解决方案。

以下是我要做的事情的一个例子: Desired Result

从F列开始,第1行是时间戳,第3行是舰队指挥官,第4行和第4行是舰队成员(如果舰队指挥官也在那里也没关系,但如果我们可以过滤那个布朗尼点个人出来,因为他们也列在第3行)。然后,这些数据将用于跟踪每个成员的参与情况,以便他们获得奖励。

到目前为止,我正在使用=TRANSPOSE({Form!C2:C}),然后使用=TRANSPOSE(SPLIT(D4,", ",0))=TRANSPOSE(SPLIT(E4,", ",0))等,然后就像我说的那样,我不想手动扩展单元格,因为会有很多船队外出(包括我睡着的时候),数据需要尽快更新。

2 个答案:

答案 0 :(得分:0)

可能有一个直接电子表格公式的解决方案(我正在考虑使用arrayformula的技巧)但为了简单起见,我将为您提供一个带有自定义公式(Google Apps脚本)的解决方案。 所以here the demo 这里是演示中使用的函数:

function fleetCommander(data) {
  var out = [[], []];
  var header = data.shift();
  var fleets = [];
  var maxFleet = 0;
  data.map(
    function (row) {
      if(row[0] == "" ) {return};
      var fleet = row[2].split(",");
      fleets.push(fleet);
      if(maxFleet < fleet.length) { maxFleet = fleet.length;}
      out[0].push(row[0]);
      out[1].push(row[1]);
    }
  );

  for(var fleetIndex = 0; fleetIndex < maxFleet; fleetIndex++) {
    out.push([]);
    }
  for(var fleetIndex = 0; fleetIndex < maxFleet; fleetIndex++) {
    for(var f = 0; f < fleets.length; f++) {
      out[fleetIndex + 2].push(fleets[f][fleetIndex] || "");
    }
  }
  return out;
}

答案 1 :(得分:0)

对于基于公式的方法,请尝试输入E1

=ArrayFormula(transpose({A2:A,D2:D,B2:B, IFERROR(TRIM(REGEXEXTRACT(","&C2:C,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,30))-1)&",+([^,]+)")))}))

如果您确实不需要包含在所需结果中的空白行,请将上述内容更改为

=ArrayFormula(transpose({A2:B,IFERROR(TRIM(REGEXEXTRACT(","&C2:C,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,30))-1)&",+([^,]+)")))}))