如何在新列中列出 3 个不同列中的所有值?

如何在新列中列出 3 个不同列中的所有值?

我在 Excel 工作表中有三个单独的列,每个列都有值。现在我想创建一个新列,将所有值连接到这些列中。当我向其中一列添加新值时,我希望汇总列自动更新。我该怎么做?

Table1

ColumnA  ColumnB  ColumnC
VALUE1   VALUE4   VALUE7
VALUE2   VALUE5   VALUE8
VALUE3   VALUE6   VALUE9
         VALUE10

生成结果:

Table2

VALUE1
VALUE2
VALUE3
VALUE4
VALUE5
VALUE6
VALUE10
VALUE7
VALUE8
VALUE9

答案1

输入以下内容事件宏在工作表代码区域:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim inpt As Range, i As Long, K As Long, N As Long
    Dim j As Long

    Set inpt = Range("A:C")
    If Intersect(Target, inpt) Is Nothing Then Exit Sub
    Application.EnableEvents = False
        Range("D:D").Clear
        K = 1
        For i = 1 To 3
            N = Cells(Rows.Count, i).End(xlUp).Row
            For j = 1 To N
                Cells(K, 4).Value = Cells(j, i).Value
                K = K + 1
            Next j
        Next i
    Application.EnableEvents = True
End Sub

它将监视列的变化A通过C并更新列因此。

在此处输入图片描述

因为它是工作表代码,所以非常容易安装和自动使用:

  1. 右键单击 Excel 窗口底部附近的选项卡名称
  2. 选择查看代码-这将打开一个 VBE 窗口
  3. 粘贴内容并关闭 VBE 窗口

如果您有任何疑虑,请首先在试用工作表上尝试一下。

如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除宏:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件宏(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

必须启用宏才能使其工作!

答案2

我有一个不需要编码的答案。

  • 我假设您想将组合(连接)列表放在 D同一张表的列中。如果您想将其放在其他地方,那只是一个微不足道的更改。
  • 我的解决方案需要两个“辅助列”;例如,列 E和 F位于同一张表上。如果您希望将它们放在其他地方,只需进行简单的更改即可。
  • 我假设你不会在前三列留空(即,数据(最后一个值之前)的列),并且您希望这些列只是连接在一起,而不是排序或去重。如果我理解错了,那是一个重大变化。
  • 我假设每列至少有一个值;即,A1B1C1为空。如果该假设不成立,则此解决方案(可能)可以适应这种情况。

解决方案:

  • 输入=IF(E1<0, "", OFFSET($A$1, F1, E1))单元格 D1
  • D1将单元格向下 拖拽/填充至 D2
  • 输入0单元格 E1并 F1
  • 输入 =IF(E1<0, E1, IF(OFFSET($A$1, F1+1, E1)<>"", E1, IF(E1<2, E1+1, -1))) 单元格 E2
  • 输入=IF(E1<0, 0, IF(OFFSET($A$1, F1+1, E1)<>"", F1+1, 0))单元格 F2
  • 选择单元格 D2:F2并向下拖动/填充,直到您期望组合列表达到所需的范围。(当然,您以后可以随时扩展它。)

列 E和 F包含 Column 中值的(基于 0)列号和行号 D。例如,0,0is A10,2is A31,3isB4等。Column 中的负值 E表示您超出了数据的末尾。 D如果值为负数,则 Column 中的公式计算结果为空白E ;否则,它使用函数检索由 和数字OFFSET()索引的值。EF

列中的公式 E检查 F前一个E值是否为负数,如果是,则将下一行设置为-1,0- 因此,一旦您越过列表末尾,您就过去了,并且您不会开始陷入困境。否则,如果当前列中有下一个值,我们将前进到该值(E1,F1+1)。否则,我们转到下一列的顶部 - 除非,如果当前列是 #2(C),我们将前进到列 #-1,因为我们在末尾。

      电子表格的屏幕截图

A现在,您可以在 Columns 、B和中添加和删除值C,并且 Column 中的列表 D将自动更新。一旦您完成此操作,您就可以隐藏辅助列。

相关内容