将特定列(可变长度)组合到一列中 - excel VBA

时间:2017-12-13 14:56:49

标签: excel vba excel-vba excel-formula office365

所以情况是我想将 4列可变长度复制到一个包含所有这些数据的列中。问题是我松散数据这个过程。

作为一个例子,它应该是693行,但我总共得到648行。 我对VBA来说相对较新,并提出了这些代码。

Sub Copy()

Dim RngA As Range, RngB As Range, RngC As Range, RngD As Range, Rng As Range
Set RngA = Range(Range("I2"), Range("I" & Rows.Count).End(xlUp))
Set RngB = Range(Range("J2"), Range("J" & Rows.Count).End(xlUp))
Set RngC = Range(Range("K2"), Range("K" & Rows.Count).End(xlUp))
Set RngD = Range(Range("L2"), Range("L" & Rows.Count).End(xlUp))
    Range("O2").Resize(RngA.Count).Value = RngA.Value
    Range("O" & RngA.Count + 1).Resize(RngB.Count).Value = RngB.Value
    Range("O" & RngB.Count + 1).Resize(RngC.Count).Value = RngC.Value
    Range("O" & RngC.Count + 1).Resize(RngD.Count).Value = RngD.Value


With Sheets("Keywords")
    Columns("O:O").Sort Key1:=.Range("=O1"), Order1:=xlAscending, Header:=xlYes
End With

End Sub

1 个答案:

答案 0 :(得分:1)

请参阅上面的评论,但这里有一种使用数组的替代方法,可以节省必须设置多个类似命名的范围变量。(顺便说一下假设所有内容都在关键字表上。)

Sub Copy()

Dim vRng(1 To 4) As Range, i As Long

With Sheets("Keywords")
    For i = LBound(vRng) To UBound(vRng)
        Set vRng(i) = .Range(.Cells(2, i + 8), .Cells(.Rows.Count, i + 8).End(xlUp))
    Next i
    For i = LBound(vRng) To UBound(vRng)
        .Range("O" & Rows.Count).End(xlUp)(2).Resize(vRng(i).Count).Value = vRng(i).Value
    Next i
    .Columns("O:O").Sort Key1:=.Range("O1"), Order1:=xlAscending, Header:=xlYes
End With

End Sub