EXCEL常用VBA代码.docx

上传人:b****4 文档编号:4793304 上传时间:2022-12-09 格式:DOCX 页数:10 大小:83.51KB
下载 相关 举报
EXCEL常用VBA代码.docx_第1页
第1页 / 共10页
EXCEL常用VBA代码.docx_第2页
第2页 / 共10页
EXCEL常用VBA代码.docx_第3页
第3页 / 共10页
EXCEL常用VBA代码.docx_第4页
第4页 / 共10页
EXCEL常用VBA代码.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

EXCEL常用VBA代码.docx

《EXCEL常用VBA代码.docx》由会员分享,可在线阅读,更多相关《EXCEL常用VBA代码.docx(10页珍藏版)》请在冰豆网上搜索。

EXCEL常用VBA代码.docx

EXCEL常用VBA代码

EXCEL常用VBA代码

删除B列中字符串数值少于21的单元格所在的行

Sub删除行()

r=Range("B65536").End(xlUp).Row'行数

Forh=rTo1Step-1

IfCells(h,2)<21ThenCells(h,2).EntireRow.Delete

Next

EndSub

-------------------------

【工作表合并】将同一工作簿中的所有工作表合并到一个工作表中

新建一个工作表,写入代码[在新建的工作表标签处右键查看代码(找不到的直接按一下alt+F11)把下面的代码复制进去然后点上面的运行运行子程序即可]:

Sub合并当前工作簿下的所有工作表()

Application.ScreenUpdating=False

Forj=1ToSheets.Count

IfSheets(j).Name<>ActiveSheet.NameThen

X=Range("A65536").End(xlUp).Row+1

Sheets(j).UsedRange.CopyCells(X,1)

*****************

或者用以下宏代码

将同一工作簿中的所有工作表合并到一个新建的工作表中

按ALT+F11调出VBA窗口,插入一个模块,然后把下面的代码复制进去。

Subhz()

SetNewSheet=Sheets.Add(Type:

=xlWorksheet)'生成一个新表

Sheets(NewSheet.Index).MoveBefore:

=Sheets

(1)'将此新表移动到最前面

Fori=2ToWorksheets.Count

Sheets(i).UsedRange.CopyNewSheet.Cells([a65536].End(xlUp).Row+2,1)'将其他表的已使用区域复制到新表中

Nexti

MsgBox"合并完成"

EndSub

这段代码很简单,其中第四行中用FOR循环得到当前工作簿中的所有工作表,第五行中使用UsedRange得到每个工作表的“已使用区域”,然后用copy方法把这些“已使用区域”中的内容复制到新建工作表中。

语句Cells([a65536].End(xlUp).Row+2,1)的作用是得到新建工作表的A列中的最后空白单元格(即要在哪个位置粘贴),加2的作用是使每次复制数据间隔2行空格(此处应表示间隔1行空格,加1的话,表示合并的表格与表格之间不留空格)。

回到EXCEL窗口,执行“工具-宏-宏”中的“hz”宏就会自动合并工作表了。

(经本人测试,不能使用右键点击标签查看代码再粘入代码的方式,应该运用菜单栏插入模块的方式)

---------------------------------------------------------------

【工作簿合并】

将需要合并的工作簿文件放置在一个文件夹中,并新建一个工作簿,写入代码:

Sub合并工作薄()

  DimFilesToOpen

  DimxAsInteger

  OnErrorGoToErrHandler

  Application.ScreenUpdating=False

  FilesToOpen=Application.GetOpenFilename_

  (FileFilter:

="MicroSoftExcel文件(*.xls),*.xls",_

  MultiSelect:

=True,Title:

="要合并的文件")

  IfTypeName(FilesToOpen)="Boolean"Then

  MsgBox"没有选中文件"

  GoToExitHandler

  EndIf

  x=1

  Whilex<=UBound(FilesToOpen)

  Workbooks.OpenFilename:

=FilesToOpen(x)

  Sheets().MoveAfter:

=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

  x=x+1

  Wend

  ExitHandler:

  Application.ScreenUpdating=True

  ExitSub

  ErrHandler:

  MsgBoxErr.Description

  ResumeExitHandler

EndSub

 

------------------------

显示隐藏的工作表

SubShowAllSheets()'使当前工作簿中的所有工作表都显示(即将隐藏的工作表也显示)"

DimwsAsWorksheet

ForEachwsInSheets

ws.Visible=TrueNextws

EndSub

--------------------------------------------------------

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

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

DimTo_be_deleted(5369)AsString

Forj=1To5368

To_be_deleted(j)=Trim(CStr(Sheets

(2).Cells(j,2).Value))

Nextj

Fori=1ToFirst_sheet_row

First_value=Trim(CStr(Sheets

(1).Cells(i,C).Value))

Forj=1To5368

'MsgBoxTo_be_deleted(j)

IfFirst_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).PasteDestination:

=Sheets(3).Range("A"&i)

'Sheets(3).Paste

Count=Count+1

i=i-1

EndIf

Nextj

Nexti

Application.ScreenUpdating=True

MsgBox"共删除了"&Count

这个脚本中有一些优化的地方,原来进行数据比较时,都是使用直接Cell(x,y)的方式访问并对比,另外也是分别循环,效率非常低,Excel一直处于假死的状态。

后来,先将比较小的一份数据拷贝到数组中,然后再进行循环,这样效率就提高了很多。

----------------------------------------------------------

合并目录中具有同样数据格式的多个Excel文件

DimMyPath,MyName,AWbName

DimWbAsWorkbook,WbNAsString

DimGAsLong

DimNumAsLong

DimBOXAsString

Application.ScreenUpdating=False

MyPath=ActiveWorkbook.Path

MyName=Dir(MyPath&"\"&"*.xls")

AWbName=ActiveWorkbook.Name

Num=0

DoWhileMyName<>""

IfMyName<>AWbNameThen

SetWb=Workbooks.Open(MyPath&"\"&MyName)

Num=Num+1

WithWorkbooks

(1).ActiveSheet

.Cells(.Range("A65536").End(xlUp).Row+2,1)=Left(MyName,Len(MyName)-4)

ForG=1ToSheets.Count

Wb.Sheets(G).UsedRange.Copy.Cells(.Range("A65536").End(xlUp).Row+1,1)

Next

WbN=WbN&Chr(13)&Wb.Name

Wb.CloseFalse

EndWith

EndIf

MyName=Dir

Loop

Range("A1").Select

Application.ScreenUpdating=True

MsgBox"共合并了"&Num&"个工作薄下的全部工作表。

如下:

"&Chr(13)&WbN,vbInformation,"提示"

-------------------------------------------------------------

奇偶页分别打印

Sub奇偶页分别打印()

Dimi%,Ps%

Ps=ExecuteExcel4Macro(“GET.DOCUMENT(50)”)‘总页数

MsgBox“现在打印奇数页,按确定开始.”

Fori=1ToPsStep2

ActiveSheet.PrintOutfrom:

=i,To:

=i

Nexti

MsgBox“现在打印偶数页,按确定开始.”

Fori=2ToPsStep2

ActiveSheet.PrintOutfrom:

=i,To:

=i

Nexti

EndSub

--------------------------------------------------------

将A列最后数据行以上的所有B列图片大小调整为所在单元大小

 

Sub将A列最后数据行以上的所有B列图片大小调整为所在单元大小()

DimPicAsPicture,i&

i=[A65536].End(xlUp).Row

ForEachPicInSheet1.Pictures

IfNotApplication.Intersect(Pic.TopLeftCell,Range(“B1:

B”&i))IsNothingThen

Pic.Top=Pic.TopLeftCell.Top

Pic.Left=Pic.TopLeftCell.Left

Pic.Height=Pic.TopLeftCell.Height

Pic.Width=Pic.TopLeftCell.Width

EndIf

Next

EndSub

如何在原有行高的基础上增加一个固定值

PrivateSubCommandButton1_Click()

Dimi,HangGao

Rows("1:

100").EntireRow.AutoFit

HangGao=InputBox("已设定自适应行高,设定想增加的行高","增加行高")

Application.ScreenUpdating=False

Fori=1To100

Rows(i).RowHeight=Rows(i).RowHeight+CVar(HangGao)

Nexti

Application.ScreenUpdating=True

EndSub

代码的意思是:

选中前100行,然后自动根据内容调整到合适的行高,就跟你选中以后双击黑线是一样的效果。

然后在弹出的对话框中输入你想要每行增加行高的数值,比如说输入23,每个行高就加23.

 

-------------------------------

其他解释:

Range是区域,范围的意思

range("A1")对一个单元格集合进行范围筛选(只选中最左上角的1个单元格),比如sheet1.range("A1:

C3").select将选中sheet1的左上角的9个单元格选中。

1、Range属性

Range(arg)(其中arg为区域名称)来返回代表单个单元格或单元格区域的Range对象

2、Cells属性

可用Cells(row,column)(其中row为行号,column为列标)返回单个单元格

3、Range和Cells

可用Range(cell1,cell2)返回一个Range对象,其中cell1和cell2为指定起始和终止位置的Range对象。

下例设置单元格区域A1:

J10的边框线条的样式。

WithWorksheets⑴

.Range(.Cells(1,1),.Cells(10,10)).Borders.LineStyle=xlThick

EndWith

注意每个Cells属性之前的句点。

如果前导的With语句应用于该Cells属性,那么这些句点就是必需的。

本示例中,句点指示单元格处于第一张工作表上。

如果没有句点,Cells属性将返回活动工作表上的单元格。

4、Offset属性

可用Offset(row,column)(其中row和column为行偏移量和列偏移量)返回相对于另一区域在指定偏移量处的区域。

下例选定位于当前选定区域左上角单元格的向下三行且向右一列处的单元格。

由于必须选定位于活动工作表上的单元格,因此必须先激活工作表。

5、Union方法

可用Union(range1,range2,...)返回多块区域,即该区域由两个或多个连续的单元格区域所组成。

下例创建由单元格区域A1:

B2和C3:

D4组合定义的对象,然后选定该定义区域。

6、在VBA操作工作簿工作表时,会有很多刷新屏幕的动作,以致代码执行速度受到影响,Application.ScreenUpdating=False可以屏蔽屏幕刷新,进而提高运行速度,不过别忘了,在程序结尾添加恢复代码,即:

Application.ScreenUpdating=TRUE

Sheets(j).Name--表(J)名称ActiveSheet.Name--活动表的名称)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1