VBA导入Excel工作表,追加新行,并更新现有的行

我正在使用Excel生成支持票证系统的报告,我想使用VBA来简化更新报告数据的过程。 我想要做的是将从票务系统转储的Excel文件导入到我用于报告的Excel文件中,但有一个转折点。 我需要使用一列中的值来确定票证是新的还是现有的。 如果是新的,我想将它添加到报告文件。 如果存在,我想用导入的数据覆盖匹配的行(基于匹配的列值,即票号)。 所以基本的过程是:

  1. 打开导出的文件(我知道如何做到这一点)
  2. 对于导出文件中的每一行
  3. 阅读门票号码(A栏)
  4. search票据号码的现有票据列(也是列A)
  5. 如果find,则用导入的数据replace信息(BX列)
  6. 否则将导入的数据附加为新行(列AX)
  7. 下一行

上面的步骤4-6是我想要帮助的。 如果票据ID存在,则可以使用= NOT(ISNA(MATCH([ 导入的票证ID ],[ 现有票证ID数组 ]))的公式,如果不存在,则返回TRUE;如果票据ID不存在,则返回FALSE喜欢find一个更优雅的解决scheme,如果存在的话。

有没有人有这样做的经验和/或一些VBA代码,我可能会调整,以适应我的目的? 提前致谢。

编辑:这是我到目前为止的代码。 这并不多。

Sub UpdateTickets() 'Specify data export file Dim fNameAndPath As Variant fNameAndPath = Application.GetOpenFilename(Title:="Select File To Be Processed") If fNameAndPath = False Then Exit Sub 'Open data export file Workbooks.Open Filename:=fNameAndPath 'For each row in data export file, starting at Row 2 'Check master data file (column A) for ticket number 'If ticket number exists, update information in columns B through P 'Else add new ticket row and place information in columns A through P 'Next row End Sub 

我只是写了这个,它的工作:

  Sub import_tickets() 'run this when the active file is the main ticket list and the active sheet is the ticket list 'exported file must be open already, and the ticket list must be the active sheet Dim exported_file As String exported_file = "exported file.xlsx" header_exists = True 'if exported file doesn't have a header, set this to false! starting_row = 1 If header_exists Then starting_row = 2 Dim first_blank_row As Long first_blank_row = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row Dim r As Long r = starting_row Dim found As Range cur_ticket_num = Workbooks(exported_file).ActiveSheet.Range("a" & r).Value Do While Not cur_ticket_num = "" 'look for current ticket number in main file Set found = Columns("a:a").Find(what:=cur_ticket_num, LookIn:=xlValues, lookat:=xlWhole) If found Is Nothing Then 'add info to end of main file write_line_from_export exported_file, r, first_blank_row first_blank_row = first_blank_row + 1 Else 'overwrite existing line of main file write_line_from_export exported_file, r, found.Row End If r = r + 1 cur_ticket_num = Workbooks(exported_file).ActiveSheet.Range("a" & r).Value Loop End Sub Sub write_line_from_export(src_filename As String, src_r As Long, dest_r As Long) For c = 1 To 24 Cells(dest_r, c).Value = Workbooks(src_filename).ActiveSheet.Cells(src_r, c).Value Next c End Sub 

我希望它有帮助。 我引用这个页面的第一个空行代码和查找代码的这个页面 。 我把代码写在了主要文件的模块中。