我在 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并更新列德因此。
因为它是工作表代码,所以非常容易安装和自动使用:
- 右键单击 Excel 窗口底部附近的选项卡名称
- 选择查看代码-这将打开一个 VBE 窗口
- 粘贴内容并关闭 VBE 窗口
如果您有任何疑虑,请首先在试用工作表上尝试一下。
如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除宏:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 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
位于同一张表上。如果您希望将它们放在其他地方,只需进行简单的更改即可。 - 我假设你不会在前三列留空(即,在数据(最后一个值之前)的列),并且您希望这些列只是连接在一起,而不是排序或去重。如果我理解错了,那是一个重大变化。
- 我假设每列至少有一个值;即,
A1
和B1
不C1
为空。如果该假设不成立,则此解决方案(可能)可以适应这种情况。
解决方案:
- 输入
=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,0
is A1
、0,2
is A3
、1,3
isB4
等。Column 中的负值 E
表示您超出了数据的末尾。 D
如果值为负数,则 Column 中的公式计算结果为空白E
;否则,它使用函数检索由 和数字OFFSET()
索引的值。E
F
列中的公式 E
检查 F
前一个E
值是否为负数,如果是,则将下一行设置为-1,0
- 因此,一旦您越过列表末尾,您就过去了,并且您不会开始陷入困境。否则,如果当前列中有下一个值,我们将前进到该值(E1,F1+1
)。否则,我们转到下一列的顶部 - 除非,如果当前列是 #2(C
),我们将前进到列 #-1,因为我们在末尾。
A
现在,您可以在 Columns 、B
和中添加和删除值C
,并且 Column 中的列表 D
将自动更新。一旦您完成此操作,您就可以隐藏辅助列。