【问题标题】:Combine two columns of data into one in excel vba在excel vba中将两列数据合并为一列
【发布时间】:2018-08-06 13:28:45
【问题描述】:

寻找在 Excel 中将数据列合并为一个的解决方案。数据不相邻,所以我希望将 A 列中的数据与 C 列中的数据合并,将结果放入 E 列中。

一个例子:

Row       A        B        C        D        E (Desired result)
1                                             1
2         1                 2                 2
3         3                 4                 3
4         5                 6                 4
5         1                 2                 5
6                                             6
7         7                 8                 7
8                                             8

数据按行的第一次出现顺序很重要。顺便说一句,避免重复也是很好的(参见示例 col E 中未重复的第二个 1 和 2),但这很容易在之后处理。

我还需要它来忽略空白单元格。

希望通过 VBA 来实现。

【问题讨论】:

  • 拜托,你能解释一下为什么你想要的结果是从第 2 行开始的每一行而不是第 1 行相加吗?会不会是因为直到第二行没有值被添加到值的“数组”中?
  • 不是。它按以下顺序输入单元格的值:A2、C2、A3、C3、A4、C4、A5、C5、A7、C7...
  • @AndrewAbbott 为什么 E 列的第 1 行是空白的,为什么不开始列出那里的值?
  • 没有原因,我只是在编辑我的示例后从错误的地方开始。现已修改。

标签: excel vba


【解决方案1】:

遍历 A 列和 C 列中的所有单元格,如果它们在 E 列中尚不存在,则按顺序列出它们:

Sub Test()

With ActiveSheet
    For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1).Value <> "" Then
            If WorksheetFunction.CountIf(.Range("E:E"), Cells(i, 1).Value) = 0 Then
                Cells(.Cells(.Rows.Count, 5).End(xlUp).Row + 1, 5).Value = Cells(i, 1).Value
            End If
        End If

        If Cells(i, 3).Value <> "" Then
            If WorksheetFunction.CountIf(.Range("E:E"), Cells(i, 3).Value) = 0 Then
                Cells(.Cells(.Rows.Count, 5).End(xlUp).Row + 1, 5).Value = Cells(i, 3).Value
            End If
        End If
    Next i
End With

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2010-12-16
    • 2016-10-24
    相关资源
    最近更新 更多