【问题标题】:Merge Rows in Excel在 Excel 中合并行
【发布时间】:2014-09-22 18:43:50
【问题描述】:
A               B   C       D       E   F   G   H
ACC'L SCIENCE   0.5 TRUE    557092  87  87      
ACC'L SCIENCE   0.5 TRUE    557092          88  88
ART             0.5 TRUE    557092  98  98      
ENGLISH 6       0.5 TRUE    557092  88  88      
ENGLISH 6       0.5 TRUE    557092          87  87
GIRLS PE        0.5 TRUE    557092  100 100     
GIRLS PE        0.5 TRUE    557092          94  94

我在一个 excel 文件中有上述 7 行。我正在尝试检查连续列是否具有相同的值,它们应该合并为一行。我正在尝试的公式将创建以下数据

A               B   C       D       E   F   G   H
ACC'L SCIENCE   0.5 TRUE    557092  87  87  88  88  
ART             0.5 TRUE    557092  98  98      
ENGLISH 6       0.5 TRUE    557092  88  88  87  87  
GIRLS PE        0.5 TRUE    557092  100 100 94  94  

伪代码看起来像:

=IF(A1 = A2),--> G1,H1 = G2, H2

然后我还必须考虑跳行 - 就像艺术课一样。使用这样的“IF”语句来检查约束是否是一种有效的方法?

IF 的问题似乎是当我真的只想合并它时它返回一个布尔值。有没有一种时尚的非 VBA 方式来做到这一点?我发现了一些具有类似数据的良好 VBA 选项——但似乎有一种方法不必将其分解。我知道 MATCH 和 INDEX,但还没有想出将它们合并的方法。

我尝试了一个数组 MATCH - INDEX 公式,但它返回奇数值——我插入了一个新列以免弄乱数据——试图基本上将数字合并到一行中。

MATCH($A$2:$A$7, INDEX(E2 & F2, $G$2:$G$7 & $H$2:$H$7))

我对 excel 还很陌生,虽然我做过一些 python。任何指向正确方向的指针,我将不胜感激。

【问题讨论】:

  • 据我所知,删除重复项将删除该行,但基本上我需要将数据保留在行的末尾并合并它。如果我在 A 列上删除重复项,它不会完全删除第 2、5 和 7 行中的所有数据吗?
  • 你写“我在一个 excel 文件中有上述 7 列。我正在尝试检查连续列是否具有相同的值,它们应该合并为一行。”我认为您的意思是“我在 excel 文件中有上述 7 个 rows。我正在尝试检查连续 rows 是否具有相同的值,它们应该合并为一个行。”
  • 应该检查哪些列的值是否相同?只有 A 列还是 A、B、C 和 D 列都有?
  • 列 A 和 D 理想情况下 -- 抱歉忘记包含它。你也是正确的——上面的 7 行。我会编辑那个
  • 大约 1,000 -- 他们是学生编号 -- 唯一的学生编号 -- 上面的文件是给一个学生的 -- 我可能应该在问题中更好地解释一下

标签: excel csv excel-formula


【解决方案1】:

我认为可能有比这更简单的方法,但我的第一个想法是分两步:

在单元格I1 中,比如说,输入以下公式:

=IFERROR(INDEX(A$1:A$7,MATCH(1,(--($A$1:$A$7=$A1))*(--(A$1:A$7<>"")),0)),"")

将其作为数组公式输入,按 ctrl + shift + enter

然后您可以根据需要向下拖动它。

(这个公式基本上是说只要A列中的值匹配,就可以拉入第一个非空行的值。)

现在,您可以复制、选择性粘贴 > 值,然后使用 Data > Remove Duplicates 删除重复的行。

就像我说的,这可能不是最优雅的解决方案,但它应该可以解决问题!

希望有帮助!!

更新:


鉴于需要 A 和 D 列都匹配的注释,试试这个公式:

=IFERROR(INDEX(A$1:A$7,MATCH(1,(--($A$1:$A$7=$A1))*(--($D$1:$D$7=$D1))*(--(A$1:A$7<>"")),0)),"")

【讨论】:

  • 我应该解释得更好——但我不仅需要检查 A 列,还需要检查 D 列——我尝试重新排列公式无济于事——它很接近,但它是用第 1 行的内容覆盖第 2-7 行
  • 感谢您的帮助——但它们不匹配。 A 列是班级名称,D 列是学生编号——完全不同的字段——只是一个额外的检查,以确保不仅班级相同,而且学生也相同。
  • 我很困惑...为什么你说更新后的公式不起作用呢?它所说的只是“引入第一个非空白单元格,其中 A 列与我的 A 列相匹配,D 列与我的 D 列相匹配”......这与您要查找的内容有何不同?
  • 你做到了!哇,我很抱歉——我输入了公式,但它没有给我最远的两列——它只填写了前两列——我重新应用了它,它确实像我希望的那样工作。非常感谢。我迷失了语法——我无法真正理解发生了什么——在工作中也是如此多任务。就是这样。谢谢约翰。
【解决方案2】:

如果先按 D 再按 A 排序,稍微摆弄的小计可能适合。对 A 中的每个更改使用 E、F、G 和 H 上的 Sum。过滤并选择 A Contains...Total。用 B 中的=Bx 填充第一个可见的非标题行,其中x 比当前行号小一。复制到 D 并向下复制以适应。取消过滤,选择所有复制,将特殊值粘贴到顶部。选择 A 不包含...Total 并删除除标题之外的所有可见内容。将 ColumnA 中的 Total 替换为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2014-03-12
    相关资源
    最近更新 更多