Google 表格

Google 表格

如何在 Excel、Libre Office 或 Google Sheets 中合并两张行数和列数不同的工作表?示例:

第 1 页:

姓名 年龄 电话
麦克风 三十五 197 158 348
戴夫 三十八 394 953 429

第 2 页:

姓名 电子邮件 生日
麦克风 [电子邮件保护] 1988 年 2 月 5 日
戴夫 [电子邮件保护] 85 年 3 月 7 日
约翰 [电子邮件保护] 1994 年 4 月 6 日

结果:

姓名 年龄 电话 电子邮件 生日
麦克风 三十五 197 158 348 [电子邮件保护] 1988 年 2 月 5 日
戴夫 三十八 394 953 429 [电子邮件保护] 85 年 3 月 7 日
约翰 [电子邮件保护] 1994 年 4 月 6 日

答案1

Google 表格

此解决方案适用于 Google 表格,支持不同大小的范围、高度和/或宽度,只要每个范围的第一列是公共索引/ID,例如共享名字示例中的列。您可以轻松添加和删除范围。

公式

=LET(
   Σ,LAMBDA(x, QUERY(x,"WHERE Col1<>''")),
   a,Σ(Sheet1!A1:C), b,Σ(Sheet2!A1:C),
   Δ,LAMBDA(x,y, INDEX(VLOOKUP(x,y, 
      SEQUENCE(1,COLUMNS(y)-1,2),0))),
   BYROW(UNIQUE(INDEX({a;b},,1)), LAMBDA(r, 
      IFNA({r, Δ(r,a), Δ(r,b)}))))

排序

如果需要排序,可以通过将最后一个公式包装在 QUERY 中来添加,该公式支持按任何列排序而不会干扰标题。在以下示例中,结果按以下方式排序:姓名

=LET(
   Σ,LAMBDA(x, QUERY(x,"WHERE Col1<>''")),
   a,Σ(Sheet1!A1:C), b,Σ(Sheet1!A1:C),
   Δ,LAMBDA(x,y, INDEX(VLOOKUP(x,y, 
       SEQUENCE(1,COLUMNS(y)-1,2),0))),
   QUERY(BYROW(UNIQUE(INDEX({a;b},,1)), LAMBDA(r, 
       IFNA({r, Δ(r,a), Δ(r,b)}))),
       "ORDER BY Col1 ASC",1))

解释

  1. LET 允许存储值和计算。
  2. rangeArangeB是您的两个数据范围(包括标题)。它们可以是不同的维度,但第一列必须是索引/ID 列(姓名在您的示例中)。
  3. Σ存储一个 LAMBDA 函数来过滤范围中的空行。这样做只是为了多次重复使用相同的公式。它接受一个参数x,可以是范围(或数组)。
  4. a并分别存储将函数应用到其中一个范围以删除空白行的b结果。Σ
  5. Δ是第二个 LAMBDA 函数,它接受两个参数xy,其中x是单个姓名y一个数组,其中第一列包含名字。再次使用 LAMBDA 来重用两个数组的代码a,而b不是重复它。
    1. VLOOKUP 用于定位x数组中包含的行y。它放置在数组函数 INDEX 中,以便可以使用单个公式从同一行返回多个值。
    2. SEQUENCE 用于返回 VLOOKUP 索引参数的列数组。该数组为 1 行 xColumns(y)-1列(因为我们不需要名字列),编号从 2 开始(第二列,跳过名字)。
  6. LET 的最后一个参数是实际返回结果的公式。BYROW 将每个唯一值从名字将两个数组的列逐一放入存储当前姓名n。INDEX 用于抓取第一列。
  7. n对于传入的每个值,LAMBDA 的公式都会返回一个数组,该数组由n第一列与 和 各自返回的数组值(列)相Δ结合而成。ab
  8. 带排序的版本
    第二个版本采用了使用 QUERY 的排序,以保持标题不受干扰。

相关内容