如何在Excel中将列堆叠并插入行?

时间:2014-07-20 15:13:19

标签: excel vba csv

我正在尝试编写一个宏来获得结果,如下图所示:

来自:收件人:

abc.a@xxx.com aaa.b @ xxx.com,bbb.a @ xxx.com

我希望以这种形式:

From To

aaa.a aaa.b

aaa.a bbb.a

但宏代码(如下所述)会将所有内容写在“A'”列下,这是我不想要的。 请帮我纠正以下宏代码,以便得到如图所示的结果。

宏代码:

Sub Macro2()

Dim LR As Long, Rw As Long
Dim wsDATA As Worksheet, wsNEW As Worksheet

Set wsDATA = ActiveSheet
Set wsNEW = Sheets.Add
LR = wsDATA.Range("A" & Rows.Count).End(xlUp).Row
For Rw = 2 To LR
    wsDATA.Rows(Rw).SpecialCells(xlConstants).Copy
    wsNEW.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteAll, Transpose:=True
Next Rw
    Range("A4").Select
    ActiveWindow.SmallScroll Down:=-3
    Application.Run "'email headers.csv'!Macro2"
    ActiveWindow.SmallScroll Down:=-15
    Columns("A:A").EntireColumn.AutoFit
    ActiveWindow.SmallScroll Down:=-30
    Sheets("Sheet1").Select
    Application.WindowState = xlNormal
    Range("B3").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "First.Last@company.com"
    Range("A1").Select
    Sheets("Sheet2").Select
    Range("A8").Select

End Sub

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这段代码试图将数据粘贴到A列的下一个可用中:

wsNEW.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteAll, Transpose:=True

你想要做的是在第1行找到下一个可用的(大概),并在那里粘贴,因为你没有转置,你可以省略该参数(或设置)它为False,这是默认值。

假设您从一个空工作表开始:

For Rw = 2 To LR
    wsDATA.Rows(Rw).SpecialCells(xlConstants).Copy
    wsNEW.Cells(1, Rw-1).PasteSpecial xlPasteAll, Transpose:=False
Next Rw

假设您已经开始使用可能已包含数据的工作表,并且第1行是任何特定列是否包含数据的合理代理:

For Rw = 2 To LR
    wsDATA.Rows(Rw).SpecialCells(xlConstants).Copy
    wsNEW.Cells(1, wsNew.Columns.Count).End(xlToLeft).Offset(,1).PasteSpecial xlPasteAll, Transpose:=False
Next Rw