2016-06-17 38 views
1

我正在处理大表,其结构与下图类似,但更多列(A-AZ)和更多行。出于某种原因,我需要将整行放入一个字符串中,就像您可以看到的“预期结果”一样,但我得到的数据非常糟糕。你知道如何得到正确的结果吗?如果没有VBA,如果可能的话Excel公式= Ax&Bx&Cx&Dx ...合并单元格出现时

enter image description here

OK,我不知道如何关闭这个问题,但我这个关闭它。我正在使用合并的单元格,因为它需要使用它们,并且这里的所有人都大叫,合并的单元格是邪恶的,所以这个问题被关闭为无法解决的

+2

可能有一个非vba解决方案,以您想要的方式,但如果可能的话,我建议您只取消合并所有单元格。如果可能的话,这是最快的解决方案。 – mattdeak

+0

取消合并可能是这里的方法。你为什么需要将细胞合并? – Brad

+0

如果您还没有猜到,使用合并单元并不是最佳实践。重复数据通常会更好,如果您只想显示数据,请将文本设为白色。或者,保留合并的单元格,但在其旁边包括一列,并填写所有单元格。(仅供参考,[http://www.ozgrid.com/Excel/ExcelSpreadsheetDesign.htm]只是一页概述了一些好的Excel的实践)。 – BruceWayne

回答

1

要展开mattdeak和Brad的评论,问题是合并单元格A3:A6。因此,值“Lamp”实际上只在单元格A3中,单元格A4:A6为空。因此,J4看到A4=""B4="",给你指示的结果(仅在C4中的值)。

正如评论者所指出的,最简单的方法是取消合并单元格并将所有数据复制到每一行中。如果您的单元必须保持合并,我推荐使用this answer中使用的方法。以下是它的工作原理:

  1. 选择一个空间,您可以在其中添加第二组表格列。我会用CA,因为你说你有列A-AZ。请输入公式=IF(ISBLANK(A3),CA2,A3)
  2. CA3直接填写DZ3。因此DZ3应该指AZ3
  3. 填写行数为CA3:DZ3。在此刻。 CA3:DZ<last row>是表格的一个副本,其中包含所有内容。
  4. 更新公式为=CA3 & CB3 & ...,无论您需要合并多少列。使用从CA:DZ的值,你应该没问题!
-1
=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)

+0

当复制到行(4)以下时,再次只写“Right”就像我的示例 – SilentCry

+0

是的,在第4行的情况下,您必须重置mod()函数。我只是写另一种方法。 – PaichengWu

1

如果你可以使用一个小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)进行调用。

+0

插入公式后直接运行正常。例如,如果我合并A1和A2,插入“Hello”并输入公式B1 = MergedValue(A1)和B2 = MergedValue(A2),一切正常。 B1是“你好”,B2是“你好”。但是,当我将“Hello”改为“Hi”时,B1获得值“Hi”并且B2停留在“Hello” – SilentCry

+0

这是因为Excel刷新单元格的方式。当您更改合并的单元格的值时,只会更改A1的值,并且只会更新直接引用A1的单元格。只需在函数的开头添加'Application.Volatile'。 –

+0

哇,它的工作原理:-)虽然我现在正在等待10秒重新计算,当一个值发生变化时:-D在i7 CPU :-D这里有什么方法可以重新计算r中的所有行吗? (r为范围) – SilentCry