Excel基于一个variables合并两个文件

我想编写一个程序,将两个单独的工作簿中的variables名称匹配,而不是将所有信息从variables复制到分页从两个工作簿到一个新的工作。 每个工作簿都有多个分页符而不是工作表。 例如:

Workbook A (Variable = X) Persons Name X Bill Work Book B Persons Nickname X Billy New Workbook Page 1 Persons Name X Bill Page 2 Persons Nickname X Billy 

我正在使用在这个网站的代码合并两个选定的工作簿,但我不知道如何匹配的名称和复制到分页符。 任何人都可以有build议,或可以帮助指导我? 谢谢!

代码:这是不正确的,但我正在尝试使用Vlookup来查找工作表中的至less一个值

 MergeSelectedWorkbooks() Dim SummarySheet As Worksheet Dim FolderPath As String Dim SelectedFiles() As Variant Dim NRow As Long Dim FileName As String Dim NFile As Long Dim WorkBk As Workbook Dim SourceRange As Range Dim DestRange As Range Dim VariableX As Variant ' Create a new workbook and set a variable to the first sheet. Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1) ' Modify this folder path to point to the files you want to use. FolderPath = "C:\Users\Documents\Test" ' Set the current directory to the the folder path. ChDrive FolderPath ChDir FolderPath SelectedFiles = Application.GetOpenFilename( _ filefilter:="Excel Files (*.xl*), *.xl*", MultiSelect:=True) ' NRow keeps track of where to insert new rows in the destination workbook. NRow = 1 ' Loop through the list of returned file names For NFile = LBound(SelectedFiles) To UBound(SelectedFiles) ' Set FileName to be the current workbook file name to open. FileName = SelectedFiles(NFile) ' Open the current workbook. Set WorkBk = Workbooks.Open(FileName) ' Set the cell in column A to be the file name. SummarySheet.Range("A" & NRow).Value = FileName ' Set the source range to be A9 through C9. ' Modify this range for your workbooks. It can span multiple rows. Set SourceRange = VBAVlookup(2, WorkBk.Worksheets(1).Range("A1:A25"), 2, False) ' Set the destination range to start at column B and be the same size as the source range. Set DestRange = SummarySheet.Range("B" & NRow) Set DestRange = DestRange.Resize(SourceRange.Rows.Count, _ SourceRange.Columns.Count) ' Copy over the values from the source to the destination. DestRange.Value = SourceRange.Value ' Increase NRow so that we know where to copy data next. NRow = NRow + DestRange.Rows.Count ' Close the source workbook without saving changes. WorkBk.Close savechanges:=False Next NFile ' Call AutoFit on the destination sheet so that all data is readable. SummarySheet.Columns.AutoFit End Sub Function VBAVlookup(ByVal search As Variant, _ cell_range As Range, _ offset As Long, _ Optional opt As Boolean = False) Dim result As Variant result = WorksheetFunction.VLookup(search, cell_range, offset, opt) 'do some cool things to result VBAVlookup = result End Function 

既然你需要结合每个variables的信息,我猜一个variables至less在一个工作簿中只存在一次? 换句话说,在将工作簿合并之前,您不需要在工作簿中合并信息,对吗?

如果是这种情况,并且一个工作簿只列出一个variables(可能为该variables的其他信息),您可以将它用作基本工作簿,因为您在工作簿之间进行search。

下面是一些通用的指针,让事情继续下去:

使用Excel-VBA代码,打开工作簿:

 'define the input filepath Dim inputfilepath As String 'define workbook name where variable info is located Dim workbookTitle As String workbookTitle = "Workbook1" 'this creates a filepath, filename, and file extension. 'if not ".xls", change to make appropriate inputfilepath = ActiveWorkbook.Path & "\" & workbookTitle & ".xls" 'open comparing workbook. see .OpenText method documentation for 'more details and options Workbooks.OpenText Filename:=inputfilepath, Origin:= _ xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _ Array(2, 1)), TrailingMinusNumbers:=True 

你如何find变数? 你提到使用VLOOKUP ,这很好。 但在这种情况下,因为您正在使用Excel-VBA,我想build议使用Range.Value属性。 您可以使用for循环遍历基本工作簿中的每个variables。

你如何find这个variables是否存在于一个不同的工作簿中? 然后使用另一个for循环search该variables,嵌套在第一个for循环中:

 'find the variable. 'here, it's assumed variable on first line Dim myVar As String '1st for loop 'w needs to be assigned to the appropriate workbook, 'and s needs to be assigned to the appropriate worksheet For varRow = 2 To Workbooks(w).Worksheets(s).UsedRange.Rows.Count 'assign the variable name to "myVar" myVar = Workbooks(w).Worksheets(s).Range(Cells(varRow, 0)).Value 'nested for loop 'similar to parent for loop, w2 needs to be assigned to the 'appropriate workbook for finding additional variable info, 'and s2 needs to be assigned to the appropriate worksheet For varRow2 = 2 To Workbooks(w2).Worksheets(s2).UsedRange.Rows.Count 'assign the variable under inspection in the comparison 'worksheet to "compareVar." compareVar = Workbooks(w2).Worksheets(s2).Range(Cells(varRow2, 0)).Value 'perform StrComp to compare myVar and compareVar, and see 'if a match. If StrComp(CStr(myVar), CStr(campareVar)) <> 0 Then 'code for merging values here, since this 'will execute if the variables match End If Next Next 

我使用StrComp函数来查看另一个工作簿中是否存在variables名称。 我还使用.UsedRange.Rows.Count来定义for循环的限制,因为这是在工作表中定义工作范围的一种方法。 for循环只是逐行阅读,查看该行的信息。 这个框架可以适应如何在工作簿中设置信息。

现在,这是逐行的,但是如何去分页到分页? 感谢这个答案 ,你可以遍历分页符。 我已经改变了从上面的第一个循环,所以它利用了pagebreaksearch的优势。 将它与上面的代码进行比较,看看它是如何改变的。 这也可以适应细节:

 '1st for loop 'w needs to be assigned to the appropriate workbook, 'and s needs to be assigned to the appropriate worksheet For Each pgBreak In Workbooks(w).Worksheets(s).HPageBreaks 'assuming the variable is immediately after a pagebreak, 'assign the variable name to "myVar" myVar = Workbooks(w).Worksheets(s) _ .Range(Cells(pgBreak.Location.Row + 1, 0)).Value 

希望这一切都有所帮助,并为你做好准备。