最近有个朋友要处理很多的Excel数据,但是手工处理又太慢,让我帮忙处理。通过搜索和自己的编写,帮他写了几个脚本,大大提高了工作效率。其实Excel中的脚本(宏)的功能非常方便,只要熟悉了Excel的对象,做一些常见的处理,还是非常容易的。
根据Sheet2中的数据,检查Sheet1中的重复数据,并且进行后续的操作(将重复数据删除或者拷贝出来)的操作。 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 '2010-12-22 使用Application.ScreenUpdating Application.ScreenUpdating = False  C = 2       '第一个工作表检测B列  X = 1       '第一条检测结果放在第1行  Count = 1  First_sheet_row = Sheets(1).Cells(65536, C).End(xlUp).Row  Second_sheet_row = Sheets(2).Cells(65536, C).End(xlUp).Row  Dim To_be_deleted(5369) As String For j = 1 To 5368      To_be_deleted(j) = Trim(CStr(Sheets(2).Cells(j, 2).Value))  Next j For i = 1 To First_sheet_row      First_value = Trim(CStr(Sheets(1).Cells(i, C).Value))      For j = 1 To 5368          'MsgBox To_be_deleted(j)          If First_value = To_be_deleted(j) Then              Sheets(1).Range("A" & CStr(i) & ":Ag" & i).Delete              Sheets(2).Cells(j, 4).Value = "Copied"              'Sheets(2).Cells(j, 3).Value = "Copied"              'Application.CutCopyMode = False              'Sheets(1).Range("A" & CStr(i) & ":Ag" & i).Copy              'Sheets(3).Paste Destination:=Sheets(3).Range("A" & i)              'Sheets(3).Paste              Count = Count + 1              i = i - 1          End If      Next j  Next i  Application.ScreenUpdating = True  MsgBox "共删除了" & Count 
 
这个脚本中有一些优化的地方,原来进行数据比较时,都是使用直接Cell(x,y)的方式访问并对比,另外也是分别循环,效率非常低,Excel一直处于假死的状态。
后来,先将比较小的一份数据拷贝到数组中,然后再进行循环,这样效率就提高了很多。
合并目录中具有同样数据格式的多个Excel文件 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 Dim MyPath, MyName, AWbName  Dim Wb As Workbook, WbN As String  Dim G As Long  Dim Num As Long  Dim BOX As String  Application.ScreenUpdating = False  MyPath = ActiveWorkbook.Path  MyName = Dir(MyPath & "\" & "*.xls")  AWbName = ActiveWorkbook.Name  Num = 0  Do While MyName <> ""    If MyName <> AWbName Then      Set Wb = Workbooks.Open(MyPath & "\" & MyName)      Num = Num + 1      With Workbooks(1).ActiveSheet        .Cells(.Range("A65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)        For G = 1 To Sheets.Count          Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1)        Next        WbN = WbN & Chr(13) & Wb.Name        Wb.Close False      End With    End If    MyName = Dir  Loop  Range("A1").Select  Application.ScreenUpdating = True  MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示" 
 
合并一个文件中的多个Sheet 
1 2 3 4 5 6 7 8 9 10 Application.ScreenUpdating = False  For j = 1 To Sheets.Count      If Sheets(j).Name <> ActiveSheet.Name Then          X = Range("A65536").End(xlUp).Row + 1          Sheets(j).UsedRange.Copy Cells(X, 1)      End If  Next  Range("A1").Select  Application.ScreenUpdating = True  MsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示" 
 
利用编程,可以让我们的生活更美好~~