有没有办法在 Excel/Sheets 中将数组中可变数量的范围合并在一起?

问题描述 投票:0回答:2

我有两个数组。其中一个包含引用工作表其他范围(其他页面)的字符串值。字符串引用的范围具有恒定的列大小(水平,在本例中为 4),但行大小(垂直)可能不同。另一个数组包含名称列表。两个数组的大小相同,每个数组的位置也相对应。我想从这些数据中获得更长的范围,第二个数组的名称分别位于每个范围的右侧。最好具有单一功能/单元,溢出到所需的空间。我非常不喜欢使用 google appscript/vba 脚本。问题的布局:

主页:

参考 姓名
第一页!A2:D4 鲍勃
第二页!A3:D5 亚当

首页:

行# 身份证 金额 商品 价格
2 23 45 芹菜 120$
3 12 34 萝卜 100$
4 8 32 煎蛋 50$

第二页:

行# 身份证 金额 商品 价格
3 35 23 生菜 32$
4 10 64 牛奶 87$
5 9 95 CPU 234$

想要的输出:

行# 身份证 金额 商品 价格 姓名
2 23 45 芹菜 120$ 鲍勃
3 12 34 萝卜 100$ 鲍勃
4 8 32 煎蛋 50$ 鲍勃
5 35 23 生菜 32$ 亚当
6 10 64 牛奶 87$ 亚当
7 9 95 CPU 234$ 亚当

我尝试过的:

lambda(id, MAKEARRAY(rows(indirect(index(MainSheet!A2:A999, id))), 5, LAMBDA(row, column, if(column=5, index(MainSheet!B2:B999, id), index(INDIRECT(index(MainSheet!A2:A999, id)), row, column)))))(1)

\-> 适用于单个范围,但我不知道如何合并它们(因此是问题标题)(只需将 1 替换为引用的 id)

VSTACK(makearray(counta(MainSheet!A2:A999), 1, lambda(id, _, MAKEARRAY(rows(indirect(index(MainSheet!A2:A999, id))), 5, LAMBDA(row, column, if(column=5, index(MainSheet!B2:B999, id), index(INDIRECT(index(MainSheet!A2:A999, id)), row, column)))))))

\->“结果应该在单行中”错误

reduce({},makearray(counta(MainSheet!A2:A999), 1, lambda(id, _, MAKEARRAY(rows(indirect(index(MainSheet!A2:A999, id))), 5, LAMBDA(row, column, if(column=5, index(MainSheet!B2:B999, id), index(INDIRECT(index(MainSheet!A2:A999, id)), row, column)))))), LAMBDA(array, array2, array&array2))

\->“引用错误”:似乎

reduce()
不适用于数组作为初始值。 (我也尝试过用
arrayformula()

强制它
excel google-sheets google-sheets-formula
2个回答
0
投票

这是一个可能的解决方案:

=ARRAYFORMULA(
   REDUCE(TOCOL(,1),SEQUENCE(COUNTA(MainSheet!A2:A)), 
     LAMBDA(a,i,VSTACK(a,
       LET(x,INDIRECT(INDEX(MainSheet!A2:A,i)), 
           {x,IF(SEQUENCE(ROWS(x)),INDEX(MainSheet!B2:B,i))})))))

0
投票
  • 使用
    REDUCE
    迭代
    A2:A3
    并获得
    ref
    erences
  • OFFSET
    即可得到对应的
    name
    ,
  • INDIRECT
    即可得到对应的
    range
    ,
  • IF/SEQUENCE
    根据
    ROWS
    range
  • 的数量获取创建重复名称
  • STACK
    range
    names
    H
    水平,最后
    V
    将当前迭代器结果与前一个
    c
    累加器进行堆叠。
    
    
  • a
© www.soinside.com 2019 - 2024. All rights reserved.