将来自多个工作表的列中的值复制到一个

问题是以下几点:我有一个包含多个工作表的Excel文件,我需要将每个工作表中的G列复制到一个新的工作表中(列应该彼此相邻或者列与数据之间有空列) 。 我也想问一下,是否可以把每个工作表的名称放在相应的列上面。

直到现在,我用这个代码:

Sub Copy_G_Columns() Dim ws As Worksheet, i As Long Application.ScreenUpdating = False On Error Resume Next Set ws = Sheets("Gee Columns") If Err.Number <> 0 Then ActiveWorkbook.Sheets.Add After:=ActiveWorkbook.Sheets(Sheets.Count): ActiveSheet.Name = "Gee Columns" On Error GoTo 0 Else Sheets("Gee Columns").Select End If For i = 1 To ActiveWorkbook.Sheets.Count - 1 With Sheets(i) .Range("G1:G" & .Cells(.Rows.Count, 7).End(xlUp).Row).Copy Cells(2, i * 2 - 1) Cells(1, i * 2 - 1) = Sheets(i).Name End With Next i Application.ScreenUpdating = True End Sub 

它似乎几乎完美地工作。 唯一的问题是,在新创build的工作表中,列中的值具有#DIV / 0错误。 我认为问题在于代码是复制格式而不是值。

这是我对你的代码的解释。

 Option Explicit Sub allGEE() Dim w As Long, wsn As String, vGEEs As Variant wsn = "Gee Columns" For w = 1 To Worksheets.Count With Worksheets(w) On Error GoTo bm_NeedWorksheet If .Name <> Worksheets(wsn).Name Then On Error GoTo bm_Safe_Exit vGEEs = .Range(.Cells(1, 7), .Cells(Rows.Count, 7).End(xlUp)).Value vGEEs(1, 1) = .Name With Worksheets(wsn).Cells(1, w * 2 - 1) .Resize(UBound(vGEEs, 1), UBound(vGEEs, 2)) = vGEEs End With End If End With Next w GoTo bm_Safe_Exit bm_NeedWorksheet: On Error GoTo 0 With Worksheets.Add(after:=Sheets(Sheets.Count)) .Name = wsn End With Resume bm_Safe_Exit: End Sub 

我保留在目标单元格中​​的错开。 我强烈怀疑你是在复制公式,只需要值。 使用variables数组(不使用剪贴板)传输值更快。 直接值转移也是可能的,但是你想把原始工作表名称放到第一个单元格中。