几个有用的Excel VBA脚本

最近有个朋友要处理很多的Excel数据,但是手工处理又太慢,让我帮忙处理。通过搜索和自己的编写,帮他写了几个脚本,大大提高了工作效率。其实Excel中的脚本(宏)的功能非常方便,只要熟悉了Excel的对象,做一些常见的处理,还是非常容易的。

根据Sheet2中的数据,检查Sheet1中的重复数据,并且进行后续的操作(将重复数据删除或者拷贝出来)的操作。

'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文件

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

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, "提示"

利用编程,可以让我们的生活更美好~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding01

看 Lumen 源代码解析 Request 到 Response 过程

当我想分析 Laravel 是如何做到从 Request -> Response 的解析过程的,发现 Lumen 相对简单,所以今天从 Lumen 源代码入手,...

35220
来自专栏二进制文集

Netty 之入门应用

系列文章:http://www.jianshu.com/p/594441fb9c9e

17430
来自专栏菩提树下的杨过

netty-socketio 示例代码

socket.io是一个不错的websocket项目,github上有它的java实现:netty-socketio 及 示例项目 netty-socketio...

2.4K60
来自专栏芋道源码1024

【死磕Java并发】—- 深入分析CAS

CAS,Compare And Swap,即比较并交换。Doug lea大神在同步组件中大量使用CAS技术鬼斧神工地实现了Java多线程的并发操作。整个AQS同...

388110
来自专栏Java编程技术

JDK8中新增原子性操作类LongAdder

LongAdder类似于AtomicLong是原子性递增或者递减类,AtomicLong已经通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说性能...

8410
来自专栏Keegan小钢

Android项目重构之路:实现篇(二)

核心层处于接口层和界面层之间,向下调用Api,向上提供Action,它的核心任务就是处理复杂的业务逻辑。先看看我对Action的定义:

13620
来自专栏Android 研究

Android Handler机制8之消息的取出与消息的其他操作

这个方法已经在Android Handler机制4之Looper与Handler简介中说过了,我就重点说下流程,大体上分为6步

13910
来自专栏个人分享

Netty的TCP粘包/拆包(源码二)

假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器端一次读取到的字节数是不确定的,所以可能发生四种情况:

23040
来自专栏向治洪

动态补丁升级

一、概述 最新github上开源了很多热补丁动态修复框架,大致有: https://github.com/dodola/HotFix https://git...

38090
来自专栏Java3y

还在用Synchronized?Atomic你了解不?

之前在学习的时候也看过AtomicInteger类很多次了,一直没有去做相关的笔记。现在遇到问题了,于是就过来写写笔记,并希望在学习的过程中解决掉问题。

13010

扫码关注云+社区

领取腾讯云代金券