将特定列(可变长度)组合成一列 – excel VBA

所以情况是,我想将4列长度可变的文件复制到一个包含这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 

看到我上面的评论,但这是一个使用数组的另一种方法,不必设置多个类似命名的范围variables(顺便说一句,一切都在关键字表)。

 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