我正在处理大表,其结构与下图类似,但更多列(A-AZ)和更多行。出于某种原因,我需要将整行放入一个字符串中,就像您可以看到的“预期结果”一样,但我得到的数据非常糟糕。你知道如何得到正确的结果吗?如果没有VBA,如果可能的话Excel公式= Ax&Bx&Cx&Dx ...合并单元格出现时
OK,我不知道如何关闭这个问题,但我这个关闭它。我正在使用合并的单元格,因为它需要使用它们,并且这里的所有人都大叫,合并的单元格是邪恶的,所以这个问题被关闭为无法解决的。
我正在处理大表,其结构与下图类似,但更多列(A-AZ)和更多行。出于某种原因,我需要将整行放入一个字符串中,就像您可以看到的“预期结果”一样,但我得到的数据非常糟糕。你知道如何得到正确的结果吗?如果没有VBA,如果可能的话Excel公式= Ax&Bx&Cx&Dx ...合并单元格出现时
OK,我不知道如何关闭这个问题,但我这个关闭它。我正在使用合并的单元格,因为它需要使用它们,并且这里的所有人都大叫,合并的单元格是邪恶的,所以这个问题被关闭为无法解决的。
要展开mattdeak和Brad的评论,问题是合并单元格A3:A6
。因此,值“Lamp”实际上只在单元格A3
中,单元格A4:A6
为空。因此,J4
看到A4=""
和B4=""
,给你指示的结果(仅在C4
中的值)。
正如评论者所指出的,最简单的方法是取消合并单元格并将所有数据复制到每一行中。如果您的单元必须保持合并,我推荐使用this answer中使用的方法。以下是它的工作原理:
CA
,因为你说你有列A-AZ
。请输入公式=IF(ISBLANK(A3),CA2,A3)
。CA3
直接填写DZ3
。因此DZ3
应该指AZ3
。CA3:DZ3
。在此刻。 CA3:DZ<last row>
是表格的一个副本,其中包含所有内容。=CA3 & CB3 & ...
,无论您需要合并多少列。使用从CA:DZ
的值,你应该没问题!=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))
得到的列:在J3,-mod(行()+ 3,6)= 0。如此的concat(偏移(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列。
还有另一种方法(所著上二零一六年六月二十零日)
步骤1.Select A3细胞并按Ctrl + A
。
步骤2.然后按Ctrl + 1
(用 “1” 键 “!”,而不是在数字 “1” 垫)
步骤3。选择“对齐”标签,禁用“合并单元格”
第4步。然后在“首页” - >“查找&选择” - >“转到特殊” - >选择“空白”(快捷键序列为: Alt
- >h
- >f
- >d
- >s
- >k
- >Enter
)
步骤5,活动单元是B4,则写=b3
并按ctrl + Enter
步骤6.Then在J3细胞写下:=CONCATENATE(A3,B3,C3,D3,E3,F3)
或=CONCAT(A3:F3)
当复制到行(4)以下时,再次只写“Right”就像我的示例 – SilentCry
是的,在第4行的情况下,您必须重置mod()函数。我只是写另一种方法。 – PaichengWu
如果你可以使用一个小VBA,可以在公共模块按照创建一个用户功能:
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
然后通过更换所有=Ax & Bx & Cx ...
公式=MergedValue(Ax) & MergedValue(Bx) & MergedValue(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)
进行调用。
插入公式后直接运行正常。例如,如果我合并A1和A2,插入“Hello”并输入公式B1 = MergedValue(A1)和B2 = MergedValue(A2),一切正常。 B1是“你好”,B2是“你好”。但是,当我将“Hello”改为“Hi”时,B1获得值“Hi”并且B2停留在“Hello” – SilentCry
这是因为Excel刷新单元格的方式。当您更改合并的单元格的值时,只会更改A1的值,并且只会更新直接引用A1的单元格。只需在函数的开头添加'Application.Volatile'。 –
哇,它的工作原理:-)虽然我现在正在等待10秒重新计算,当一个值发生变化时:-D在i7 CPU :-D这里有什么方法可以重新计算r中的所有行吗? (r为范围) – SilentCry
可能有一个非vba解决方案,以您想要的方式,但如果可能的话,我建议您只取消合并所有单元格。如果可能的话,这是最快的解决方案。 – mattdeak
取消合并可能是这里的方法。你为什么需要将细胞合并? – Brad
如果您还没有猜到,使用合并单元并不是最佳实践。重复数据通常会更好,如果您只想显示数据,请将文本设为白色。或者,保留合并的单元格,但在其旁边包括一列,并填写所有单元格。(仅供参考,[http://www.ozgrid.com/Excel/ExcelSpreadsheetDesign.htm]只是一页概述了一些好的Excel的实践)。 – BruceWayne