首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转置、顺序和查询的混合

转置、顺序和查询的混合
EN

Stack Overflow用户
提问于 2021-05-23 07:28:38
回答 3查看 46关注 0票数 0

google或app-scrippt的大师们好!

我正面临另一个问题,这将需要我(以我目前的知识)做4个步骤来获得最终结果。我想知道我的问题是否可以用更温和的方式解决,而不需要4个助手列表。

我的原件有一列(列A),每行有两个或三个名字(列B,C,D):

最后,我希望只有2个列,比如

有什么建议可以去掉4个助手列表吗?我不喜欢我的方式首先转置,然后查询每一列.....我的解决方案不是动态的。;(请注意:一行中有一个单元格为空无关紧要。序列始终为3!

最好的方案甚至是根据另一个工作表(名称列: B;值列C)中的值对每个行/序列进行排序,以便索引对所有行/序列都是相同的。

EN

回答 3

Stack Overflow用户

发布于 2021-05-23 08:16:49

也许这就是你需要的..。

代码语言:javascript
复制
={INDEX(FLATTEN(SPLIT(REPT(QUERY(F2:F9," where F is not null ",0)&"@",3),"@"))),
        FLATTEN(G2:I9)}

(请始终-as -根据您的范围和区域设置调整公式)

使用的函数:

票数 0
EN

Stack Overflow用户

发布于 2021-05-23 09:09:58

代码语言:javascript
复制
function pivotb() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');//data sheet
  const vs = sh.getRange(2,1,sh.getLastRow() -1,4).getValues();
  const osh = ss.getSheetByName('Sheet2');//output sheet
  let obj = {pA:[]};
  vs.forEach((r,i)=>{
    if(!obj.hasOwnProperty(r[0])) {
      obj[r[0]]=[];
      obj.pA.push(r[0]);
      let t=r.slice();
      t.shift();
      t.forEach(e=>{
        if(e) {
          obj[r[0]].push(e);
        }
      });
    };
  });
  let oA=[['Number','Name']];//output array with headers
  obj.pA.forEach(p=>{
    obj[p].forEach(e=>{
      oA.push([p,e])
    });
  });
  osh.clearContents();
  osh.getRange(1,1,oA.length,oA[0].length).setValues(oA);
}
票数 0
EN

Stack Overflow用户

发布于 2021-05-23 09:43:30

假设所示的未处理数据位于名为Sheet1的工作表中,请将以下公式放入新工作表的单元格A1中:

=ArrayFormula({"number","name"; SPLIT(FLATTEN(FILTER(Sheet1!A2:A&"~"&Sheet1!B2:D,Sheet1!A2:A<>"")),"~",1,0)})

这将根据您所需的布局生成标题和所有结果。

您可以根据需要更改公式中的标题标签。

rest将A:A中每个单元格的值与B:D中每个相应行的值连接起来,并使用一个波浪号(~)。

FILTER只保留A:A不为空的那些条目。

FLATTEN在所有连接中生成一列。

SPLIT在波浪号处分为三列(请注意,SPLIT的最后一个参数是0,这意味着“不要从结果中删除空值”)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67654954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档