excel - VBA做列合并

标签 excel vba for-loop multiple-columns

我正在尝试制作一份合并财务报表,其中在最后一列显示子公司和合并数字的所有详细信息(我计划使用总合并数字的公式)。我正在尝试从选定的文件中复制一些特定的工作表列(比如说 C 列)(每个文件只有一张具有完全相同的布局、结构和基本数据的工作表),然后将其粘贴到一个主工作表(新添加)中以显示从左到右主表 B 列中每个文件的 C 列详细信息。另外,我想在主表的第 1 行显示每个文件的名称,但我仍然不知道如何将它放入我的代码中。

这是我的代码。到目前为止,我在excel 2010中运行它后,发现每一列都是一样的。我不知道出了什么问题。我有 60 多个文件来做这个详细的合并。任何帮助将不胜感激。谢谢你。

Sub CombineSheetColumn()
Dim DataBook As Workbook, OutBook As Workbook
Dim DataSheet As Worksheet, OutSheet As Worksheet
Dim TargetFiles As FileDialog
Dim MaxNumberFiles As Long, FileIdx As Long, _
HeaderRow As Long
Dim DataRng As Range, OutRng As Range

Application.ScreenUpdating = False
Application.DisplayAlerts = False
'initialize constants

HeaderRow = 2 'assume headers are always in row 2
LastOutCol = 1

'select files
Set TargetFiles = Application.FileDialog(msoFileDialogOpen)
  With TargetFiles
    .AllowMultiSelect = True
    .Title = "Multi-select target data files:"
    .ButtonName = ""
    .Filters.Clear
    .Filters.Add ".xlsx files", "*.xlsx"
    .Show
  End With

'set up the output workbook
  Set OutBook = Workbooks.Add
  Set OutSheet = OutBook.Sheets(1)

'loop through all selected files
  For FileIdx = 1 To TargetFiles.SelectedItems.Count
'open the file and assign the workbook/worksheet
  Set DataBook = Workbooks.Open(TargetFiles.SelectedItems(FileIdx))
  Set DataSheet = DataBook.ActiveSheet

    Set DataRng = Range(DataSheet.Cells(HeaderRow + 1, 3), DataSheet.Cells(32, 3))
    Set OutRng = Range(OutSheet.Cells(HeaderRow + 1, 2), OutSheet.Cells(32, LastOutCol + 1))     
'copy the data to the outbook
  DataRng.Copy OutRng

'close the data book without saving
  DataBook.Close False

'update the last outbook row
  LastOutCol = OutSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column  
Next FileIdx
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

最佳答案

要获取源工作簿的文件名,您可以使用:

Cells(32, LastOutCol + 1).value=TargetFiles.SelectedItems(FileIdx).Name

至于所有数据都相同,您可以通过在行上添加断点来逐步检查循环的每次迭代中源工作簿中复制的列:
DataRng.Copy OutRng

关于excel - VBA做列合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937424/

相关文章:

vba - 做直到循环,如果然后 VBA Excel

c# - 通过 EPPlus 调用 VBA 宏

vba - 用户窗体在 "End Sub"之后关闭,而无需调用 "Unload Me"

Java在for循环中生成随机数

java - Android - 中国生肖应用程序 - 如何攻击这个

Excel - 撤消/重做后公式不会自动刷新

excel - 函数的条件分支会引发错误的圆引用错误

vba - 将事件处理程序应用于动态控制

vba - 如果文件名包含特定文本则执行

java - 需要在for循环中声明变量