Excel Formula = Ax&Bx&Cx&Dx …合并单元格出现时
我正在处理与下面的图片类似的大桌子,但更多的列(A-AZ)和更多的行。 出于某种原因,我需要将整行放入一个string中,就像您可以看到的“预期结果”一样,但是我得到的数据非常糟糕。 你知道如何得到正确的结果吗? 没有VBA,如果可能的话
好,我不知道如何解决这个问题,但是我正在通过这个来closures它。 我正在使用合并的单元格,因为它需要使用它们,而且这里的所有人都大叫,合并的单元格是邪恶的,所以这个问题被closures为不可解的 。
为了扩大mattdeak和Brad的评论,问题是单元格A3:A6
被合并。 结果,“灯”的值实际上只在单元格A3
,单元格A4:A6
是空白的。 因此, J4
看到A4=""
和B4=""
,给你显示的结果(只有C4
的值)。
评论者指出,最简单的方法是取消合并单元格,并将所有数据复制到每一行中。 如果你的单元格不得不保持合并,我build议在这个答案中使用的方法。 这是如何工作的:
- select一个可以添加第二组表格列的空间。 我会使用
CA
因为你说你有专栏A-AZ
。 - 在
CA3
,input公式=IF(ISBLANK(A3),CA2,A3)
。 - 从
CA3
通过DZ3
填充。 因此DZ3
应该指AZ3
。 - 填写
CA3:DZ3
的行数与您一样多。 在此刻。CA3:DZ<last row>
是表格的一个副本,其中包含所有内容。 - 更新公式为
=CA3 & CB3 & ...
无论您需要合并多less列。 使用来自CA:DZ
的值,你应该没问题!
如果您可以使用一个小的VBA,您可以在公共模块中创build一个用户function,如下所示:
Public Function MergedValue(r As Range) As Range Application.Volatile If Not r.MergeCells Then Set MergedValue = r Else Set MergedValue = r.MergeArea.Cells(1, 1) End If End Function
然后用=MergedValue(Ax) & MergedValue(Bx) & MergedValue(Cx) ...
replace所有=Ax & Bx & Cx ...
公式
编辑:添加Application.Volatile
在开始
编辑2:不使用Application.Volatile
Public Function MergedValue(r As Range, RangeToCheck as range) As Range If Not r.MergeCells Then Set MergedValue = r Else Set MergedValue = r.MergeArea.Cells(1, 1) End If End Function
如果你想检查范围[A1:C3]中的单元格,就用=MergedValue(A1,$A$1:$C$3)
来调用它。
=concat(offset(A3,-mod(row()+3,6),,4)) & concat(offset(B3, -mod(row()+1,2),,2)) & C3 & concat(offset(D3,-mod(row()+3,6),,4)) & concat(offset(E3, -mod(row()+1,2),,2)) & concat(offset(F3, -mod(row()+1,2),,2))
得到A列:在j3中,-mod(row()+ 3,6)= 0.所以concat(offset(A3,0,0,4))= A3&A4&A5&A6 = A3。
得到B列:在j3中,-mod(row()+ 1,2)= 0.所以cancat(offset(B3,0,0,2))= B3&B4 = B3。
等D,E,F列。
还有另一种方法(2016/6/20写)
步骤1.selectA3单元格,然后按Ctrl + A
步骤2.然后按下Ctrl + 1
(“!”的“1”键,而不是数字键盘的“1”)
第3步。select“alignment”标签,禁用“合并单元格”
步骤4.然后在“Home” – >“Find&Select” – >“Go to special” – >select“Blanks”(快捷键序列是: Alt
– > h
– > f
– > d
– > s
– > k
– > Enter
)
步骤5,激活的单元格为B4,然后写入=b3
,然后按ctrl + Enter
步骤6.然后在J3单元中记下: =CONCATENATE(A3,B3,C3,D3,E3,F3)
或=CONCAT(A3:F3)