在macros中结合列

我知道这个话题有很多不同的方法。 我只是刚开始看vba和macros的今天,但我一直无法find或调整我find的任何解决scheme。

我在4个不同的Excel文件中拉出4列数据,每个文件中有大约500列和2-4k行数据。

我想通过以下(不雅)解决scheme将感兴趣的列编译成一个excel文件(见下文)。

我希望有人能够指出如何把这16列转换成4列(或者如果有人能解释如何把数据分成4列,那也是很棒的)。

谢谢!

Sub Macro2() ' Macro2 Macro Workbooks.Open Filename:="[path]" Workbooks.Open Filename:="[path]" Workbooks.Open Filename:="[path]" Workbooks.Open Filename:="[path]" Workbooks("Stroop_Distressing_A_out.csv").activate Sheets("Stroop_Distressing_A_out.csv").select Range("GL:GL, HP:HP, IJ:IJ, IS:IS").copy Workbooks("Merge Excel Data Macro1.xlsm").activate Sheets("Sheet1").select Range("A:D").select ActiveSheet.Paste Workbooks("Stroop_Distressing_B_out.csv").Activate Sheets("Stroop_Distressing_B_out.csv").Select Range("GL:GL, HP:HP, IK:IK, IT:IT").Copy Workbooks("Merge Excel Data Macro1.xlsm").Activate Sheets("Sheet1").Select Range("E:H").Select ActiveSheet.Paste Workbooks("Stroop_Distressing_C_out.csv").activate Sheets("Stroop_Distressing_C_out.csv").select Range("DV:DV, EZ:EZ, FU:FU, GD:GD").copy Workbooks("Merge Excel Data Macro1.xlsm").activate Sheets("Sheet1").select Workbooks("Merge Excel Data Macro1.xlsm").Activate Sheets("Sheet1").Select Range("I:L").Select ActiveSheet.Paste Workbooks("Stroop_Distressing_D_out.csv").activate Sheets("Stroop_Distressing_D_out.csv").select Range("GL:GL, HP:HP, IK:IK, IT:IT").copy Workbooks("Merge Excel Data Macro1.xlsm").activate Sheets("Sheet1").select Workbooks("Merge Excel Data Macro1.xlsm").Activate Sheets("Sheet1").Select Range("M:P").Select ActiveSheet.Paste End Sub 

如果您的VBAmacros成功完成,可以使用以下Sub来执行其余任务:

 Sub AggregateColumns() Dim wsSource As Worksheet Dim wsTarget As Worksheet Dim maxRowSource As Integer Dim maxRowTarget As Integer Set wsSource = Sheets("Sheet1") Set wsTarget = Sheets("Sheet2") maxRowSource = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row maxRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row wsSource.Range("A1:D" & maxRowSource).Copy Destination:=wsTarget.Range("A1") maxRowSource = wsSource.Cells(wsSource.Rows.Count, "E").End(xlUp).Row maxRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row wsSource.Range("E1:H" & maxRowSource).Copy Destination:=wsTarget.Range("A" & maxRowTarget + 1) maxRowSource = wsSource.Cells(wsSource.Rows.Count, "I").End(xlUp).Row maxRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row wsSource.Range("I1:L" & maxRowSource).Copy Destination:=wsTarget.Range("A" & maxRowTarget + 1) maxRowSource = wsSource.Cells(wsSource.Rows.Count, "M").End(xlUp).Row maxRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row wsSource.Range("M1:P" & maxRowSource).Copy Destination:=wsTarget.Range("A" & maxRowTarget + 1) End Sub 

希望这会有所帮助。