EXCEL技巧之2,20万条数据的高效处理
时间:2026-02-03浏览次数:
在EXCEL表格中,数据有多达20万条,办公电脑基本无法处理。最近有个同事遇到了,而且以后基本每天都要处理,用VBA编写宏命令解决。刚开始写的简单,效率并不高

在EXCEL表格中,数据有多达20万条,办公电脑基本无法处理。最近有个同事遇到了,而且以后基本每天都要处理,用VBA编写宏命令解决。刚开始写的简单,效率并不高,同事说每天要处理近20个文件。必须要优化程序,下面是优化后程序(部分)

具体功能:打开excel表格,读取内容(假定Sheet1中A列为身份证号、B列为数学成绩、C列为语文成绩、D列为成绩合计、E列是姓名),仅获取身份证号码前6为是“510700”、总成绩低于120分、且语文数据成绩都低于60分的记录。


Sub A大数据处理()

Dim tmpWorkBook As Workbook

Dim tmpWS1 As Worksheet ' 数据工作表(Sheet1)

Dim tmpWS2 As Worksheet ' 结果工作表(Sheet1)

Dim ShuJu As Variant ' 存储源数据的数组(内存操作)

Dim JieGuo As Variant ' 存储筛选结果的数组

Dim tmpI, tmpJ, tmpK As Long

Dim tmpStr As String

Application.Cursor = xlWait

' 优化效率用的,禁用Excel耗时功能


Application.ScreenUpdating = False ' 关闭屏幕更新

Application.Calculation = xlCalculationManual ' 关闭自动计算

Application.EnableEvents = False ' 关闭事件触发

Set tmpWS2 = Sheet1

tmpWS2.UsedRange.ClearContents

tmpWS2.Range("A1:E1").Value = Array("身份证号", "数学成绩", "语文成绩", "成绩合计", "姓名")

tmpStr = "D:\数据.xlsx"

Set tmpWorkBook = Workbooks.Open(Filename:=tmpStr, ReadOnly:=True) ' 只读打开,提升速度

Set tmpWS1 = tmpWorkBook.Worksheets("Sheet1")

ShuJu = tmpWS1.UsedRange.Value ' 读取源数据到数组,这个是高效处理的重要点

tmpJ = UBound(ShuJu, 1)

ReDim JieGuo(1 To tmpJ, 1 To 5)

tmpK = 0

For tmpI = 2 To tmpJ '有表头,从第2行开始

If Left(ShuJu(tmpI, 1), 6) = "510700" And ShuJu(tmpI, 4) < 120 And ShuJu(tmpI, 2) < 60 And ShuJu(tmpI, 3) < 60 Then

' 找到符合条件的数据

tmpK = tmpK + 1

JieGuo(tmpK, 1) = ShuJu(tmpI, 1)

JieGuo(tmpK, 2) = ShuJu(tmpI, 2)

JieGuo(tmpK, 3) = ShuJu(tmpI, 3)

JieGuo(tmpK, 4) = ShuJu(tmpI, 4)

JieGuo(tmpK, 5) = ShuJu(tmpI, 5)

End If

Next

tmpWS2.Range("A2").Resize(tmpK, 5).Value = JieGuo

tmpWorkBook.Close SaveChanges:=False

Set tmpWS1 = Nothing

Set tmpWS2 = Nothing

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

Application.EnableEvents = True

MsgBox "已获取符合条件的记录!", vbInformation, "提示"

Application.Cursor = xlDefault

End Sub

Copyright © 2002-2026 尊龙时凯信息安全科技有限公司 版权所有HTML地图 XML地图 非商用版本  备案号:京ICP备2021000549号-3  
地址:四川省成都市武侯区簇桥街道太平园西路45号2单元901室  邮箱:admin@gosun.live  电话:400-729-3865