|
Step1 新建并打开空白工作簿,然后另存为“列首尾相接.xlsm”(即Excel启用宏的工作簿);
Step2 打开VBA编辑器,粘贴以下代码,运行即可。
Sub 多列首尾相接()
Dim rngRanges As Range '需处理的多列数据区域
Dim intColsCount As Integer '选中区域的总列数
Dim intRowsCount As Integer '选中区域的总行数
Dim i As Integer '循环变量
Dim strSourceFileName As String '原始数据工作簿名称(含路径)
Dim strSourceWbName As String '原始数据工作簿名字(仅名字,不含路径)
Dim strSheetName As String '原始数据工作表名字
Dim strMsg As String '提示信息
strSourceFileName = Application.GetOpenFilename("Excel工作薄 (*.xls*),*.xls*")
If strSourceFileName = "False" Then
MsgBox "没有选择文件!请重新运行本程序并选择一个被处理文件!", vbInformation, "取消"
Exit Sub
Else
Workbooks.Open Filename:=strSourceFileName
strSourceWbName = ActiveWorkbook.Name '获取原始数据工作簿的名字(仅名字,不含路径)
Set rngRanges = Application.InputBox(prompt:="请选择要处理的数据区域:", Type:=8)
strSheetName = ActiveSheet.Name '获取原始数据工作表的名字
intColsCount = rngRanges.Columns.Count
intRowsCount = rngRanges.Rows.Count
strMsg = rngRanges.Address
For i = 1 To intColsCount
Workbooks(strSourceWbName).Worksheets(strSheetName).Activate
rngRanges.Columns(i).Copy
Workbooks("列首尾相接.xlsm").Worksheets("sheet1").Activate
Worksheets("sheet1").Cells(1, 2).Select
Worksheets("sheet1").Cells(1 + intRowsCount * (i - 1), 1).Value = "原第 " & i & " 列"
ActiveCell.Offset(intRowsCount * (i - 1), 0).PasteSpecial
Next i
Worksheets("sheet1").Range("f1").Value = "原始数据区域范围是 " & strMsg
End If
End Sub
|