【问题标题】:How duplicate rows in Google Sheets?Google表格中如何重复行?
【发布时间】:2018-07-29 00:20:27
【问题描述】:

我什至不知道如何正确地问这个问题。

我有一份财产清单及其所有者、所有者地址和电话号码。

https://docs.google.com/spreadsheets/d/1-SUC9e53r-o73m5fLaV2FjkcGzLwW4mVPR0rUpw93aw/edit?usp=sharing

如您所见,最后 10 列是电话号码。我想为每个号码创建一个新行,在电话号码之前的单元格中包含所有相同的信息。有谁知道怎么做?或者可以指出我需要学习的正确方向。我正在尝试 Youtube Marcos 并自己学习如何做,但我什至不知道要搜索什么。

【问题讨论】:

  • 谢谢。我会试试的。如果我宏,那我只需要做一次吧?
  • 有更高效的流程吗?
  • 录制一个宏,你自己选择应该复制的行中的数据,插入一行,然后使用自动填充设置新行的相关值。然后您可以尝试编辑它生成的脚本。如果您使用粘贴而不是自动填充,您可能需要研究如何在 API 参考中读取和写入值以避免硬编码值。
  • 如果您正在寻找一个脚本来自动执行此操作,this SO post 可以提供一个起点。

标签: google-sheets google-sheets-macros


【解决方案1】:

首先,您需要对数据进行一些清理,因为您希望所有这些电话号码都没有科学记数法。这可能看起来像自定义数字格式 0(需要多少位,没有小数位或逗号),但您需要找回在 901 之后丢失的数字。

完成此操作后,假设您的输入表名为“输入样本”然后在所需的输出表上,将 A 到 O 列的列标题复制到第 1 行。在 O2 中,放置以下公式,这将创建您的电话号码列表(按出现顺序排列):=arrayformula(transpose(split(textjoin(" ",false,'Input Sample'!O2:X)," "))) [这个公式的作用是把一个电话号码列表放在一起,没有空格,用空格分隔,跳过任何空的,把它分开,然后垂直定位。]

剩下的工作是编写与电话号码相关的字段列表。下面还有其他方法。由于在您的列表中似乎没有两个人拥有相同的电话号码(一旦您清理了这些指数),以下工作。返回输出表的单元格 A2,放置公式 =query('Input Sample'!A$2:X$59,"Select A, B, C, D, E, F, G, H, I, J, K, L, M, N"&" where O="&O2&" or P="&O2&" or Q="&O2&" or R="&O2&" or S="&O2&" or T="&O2&" or U="&O2&" or V="&O2&" or W="&O2&" or X="&O2,0) 并将其向下拖动,直到有电话号码为止。您将取回与该电话号码对应的列值。

请注意,这种方法会跳过没有电话号码的任何人,这似乎符合您的目标。

编辑:确实可以在没有 QUERY 的情况下完成,这将缓解重复和大量搜索可能出现的问题。像以前一样生成电话号码列。为简单起见,通过输入 Y2 =counta(O2:X2) 并将其向下拖动,在输入表中增加包含电话号码数量的 Y 列。在所需输出纸的 A2 中,放置以下内容: =transpose(split(arrayformula(textjoin("&",false,iferror(rept('Input Sample'!A2:A&"&",'Input Sample'!$Y2:$Y)))),"&")) 然后将其直接拖过 N2。这个工作原理是建立一个字符串,其中包含由“&”分隔的重复条目(从不在字段中出现),其中每个条目出现的次数是其原始行中包含电话号码的次数,然后将所有这些放在一起,将它们分开并垂直定向。 iferror 处理没有任何数字的人。当我使用这种方法时,我在最右边的列和底部看到了一些时髦。正确添加更多列以防止转置丢失内容或修剪多余的分隔符(这使公式更难读)似乎没有帮助。 [REPT 和可能会起作用的字符串有一些限制,尽管我很难在表中它们所做的部分中具体说明原因。]

主要编辑:这是一个更简单的版本,更可靠,因为它不需要 QUERY(对重复项很挑剔)或 REPT 和密集的字符串处理(这似乎遇到了限制或我的错误代码)。

第 0 步:用 Y 列增加输入以获取上述音素的数量(将 Y2=counta(O2:X2) 从 Y2 拖到下方),然后添加带有第一个音素索引的 Z 列。在 Z2 中放置 =if(Y2=0,1000000, 1+sum(Y$2:Y2)-Y2) 并按 Y2 对第 2 行进行排序。由于排序是升序的,因此除了将无电话号码的条目置于无害的底部之外,其他所有内容都将保持不变。

第 1 步:如上,将 A 到 N 列的列标题复制到结果表中,并为 O 列提供类似“电话”的标题。在 O2 中使用=arrayformula(transpose(split(textjoin(" ",false,'Input Sample'!O2:X)," "))) 如上所述获取这些数字。

第 2 步:在 P1 中放置标题“源”,该列将告诉在原始条目块中的何处可以找到该行的值。在 P2 中放置 =IFERROR(MATCH(ROW()-1,'Input Sample'!Z$2:Z,0),P1) 并将其向下拖动。这基本上说明如果我是这组电话号码的第一行,很好,使用它,否则,我必须来自与我上面的条目相同的行。

第 3 步:现在您可以获取所有数据。在 A2 中,放置 =index('Input Sample'!A$2:A,$P2) 将其拖过 N 列并向下拖动到数字为止(在您的情况下为第 198 行)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多