打开各种文本文件并将列复制到主工作簿中

我期望编写一个高效的macros,最终在处理研究数据时节省大量的时间。 目标是用综合数据创build一个主工作簿。

情况如下:

  • 我有40个研究对象,都有一个标题为“Subject 1_OUTPUT.txt”(其中“1”在1到40之间)的主题编号的输出文件。

  • 在每个输出文本文件中,有〜30个主题特定的数据列…并且列标题相同,并且以相同的顺序在所有40个主题文件之间(例如,列A标题为“OutputDataObject1”在主题1的文件中,主题2的文件等)。

最终目标:创build一个主Excel文件,该文件的主题文件(例如:OutputDataObject1,OutputDataObject2等)中的每个列标题都有一个名称,在每个选项卡中列出每个主题的列,并在列中列出其数据。 因此,每个选项卡在一个选项卡上将具有适用于所有40个主题的“苹果到苹果”数据。

macros观逻辑:

  • 打开每个主题txt文件(主题#1到主题#40)
  • 将主题txt文件中的每一列都复制到Master Workbook上与数据对象相同名称的选项卡上,并根据主题号(主题1到40)复制到该选项卡上相应的主列中,

我知道这是可行的,但我正在努力如何创build嵌套的循环打开,将列匹配到选项卡名称,然后find主题的特定列粘贴到主工作簿。

更新10-16-15:我解决了问题与我的循环 – 下面的工作代码:)

Dim MasterWB As Workbook Dim OpenWB As Workbook Dim cur_subjectname As String Dim cur_filename As String Dim cur_source_column As Integer Dim cur_subject_number As Integer Dim MasterWB_sheetcount As Integer 'to cycle through MasterWB Dim cur_sheetnumber As Integer 'to cycle through MasterWB Dim S As Integer Dim I As Integer 'to cycle through MasterWB Dim cur_subjectoffset As Integer Dim Cell As Range Application.DisplayAlerts = False Application.ScreenUpdating = False cur_source_column = 0 cur_subject_number = 1 'tied to master WB column # cur_sheetnumber = 3 'first tab to populate subject data cur_subjectoffset = 0 'to move down "Subject_List" tab of subjects Set MasterWB = ThisWorkbook MasterWB_sheetcount = MasterWB.Worksheets.Count - 3 MasterWB.Worksheets("Subject_List").Activate 'first subject number in A2 cur_subjectname = Sheets("Subject_List").Range("A1").Offset(cur_subject_number, 0).Value 'Outside Loop - open each workbook, starting with Subject #1 For S = 1 To 45 'Change for Total # of Subjects cur_filename = ThisWorkbook.Path & "/" & cur_subjectname & "_OUTPIV.xlsx" 'Change for different data types If Len(Dir(cur_filename)) = 0 Then Else 'load data to MasterWB (ThisWorkbook) Set OpenWB = Workbooks.Open(cur_filename) For I = 1 To MasterWB_sheetcount OpenWB.Sheets(1).Range("B6:B110").Offset(, cur_source_column).Copy MasterWB.Sheets(cur_sheetnumber).Range("A2").Offset(, cur_subject_number).PasteSpecial cur_source_column = cur_source_column + 1 cur_sheetnumber = cur_sheetnumber + 1 Next I OpenWB.Close End If 'Reset values and Move to next Subject cur_subject_number = cur_subject_number + 1 cur_source_column = 0 cur_sheetnumber = 3 MasterWB.Worksheets("Subject_List").Activate 'first subject number in A2 cur_subjectname = Sheets("Subject_List").Range("A1").Offset(cur_subject_number, 0).Value Next S