在Excel中合并行

时间:2014-09-22 18:43:51

标签: excel csv excel-formula

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。任何指针都在正确的方向,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为这可能比这更容易,但我的第一个想法是两个步骤:

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

=IFERROR(INDEX(A$1:A$7,MATCH(1,(--($A$1:$A$7=$A1))*(--(A$1:A$7<>"")),0)),"")
ctrl + shift + 输入

输入数组公式

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

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

现在,您可以复制,粘贴特殊&gt;值然后使用Data&gt; 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)),"")

答案 1 :(得分:1)

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