以下是本人Wen98在VBA工作实践中,为方便查找,备忘性的积累了一些VBA常用的语句\函数\子过程,以提高自己一点工作效率。(仅供参考、引用) 获取名字:
选定:
单元格赋值:
单元格跨薄引用(不打开工作薄而提取数据):
='F:\负债业务日报\prg\[模板20.xls]金融资产'!F5:F5
或:
是否显示警告信息:
显示提示信息:
选择是否提示:
If MsgBox("设为汇总的单元格是:" & Selection.Address
& "
关闭薄:
删除子表:
删除行
删除单元格:
对象的完整引用:
Windows("模板1.xls").Activate
Range("A28") =
Application.Workbooks("模板20_表内数据转换2.xls").Sheets("操作步骤").Range("F7")
更简洁地:
[A28]=Workbooks("模板20.xls").Sheets("操作步骤").Range("F7")
复制单元格(带格式):
Sub Macro1()
End Sub
同薄复制单元格(带格式)
Sub Macro_1()
End Sub
同薄复制单元格区域(空白为边界)
Sub RngCopy()
或
或
End Sub
同薄复制单元格,去掉多余的激活和选择
Range("A1").Copy Sheets("Sheet2").Range("B1")
通过数组读写单元内容(不带格式):
Sub RngArr()
End Sub
实例:
全表复制粘贴:
复制值:
保存薄:
新建薄并保存修改结果:(复制区域SUB,在下面)
原名保存文件,不显示警告信息框
关闭不保存,不显示警告信息框
是否显示屏幕变化
是否显示Excel界面
Application.Visible = False '不显示Excel界面 True
'False
Application.Visible = True
打开文件:
另一种:
总行数:
已用区域行数 = Sheets("基金取数").UsedRange.Rows.Count
已用区域列数 = Sheets("基金取数").UsedRange.Columns.Count
右下角地址 = Cells(已用区域行数, 已用区域列数).Address
MsgBox Range("A1:" & 右下角地址).Address
已用区域地址
MsgBox ActiveSheet.UsedRange.Address(0, 0) '已用区域地址
或:
已选定区域行数 = Selection.Rows.Count '已选定范围的行数
[B1] = 已用区域行数
或:
最后行号 = Range("B5").End(xlDown).Row
最后列号 = Range("A4").End(xlToRight).Column
列名 = Columns(最后列号).Address
最后行号 = Cells(Rows.Count, 3).End(xlUp).Row
相当于:
最后行号 = Range("C65536").End(xlUp).Row
获取行列坐标:
列 = Selection.Column
行 = Selection.Row
或
列 = ActiveCell.Column
行 = ActiveCell.Row
设置公式(填充):(关联的透视表最后列并不固定)
Sheets("透视表").Select
最后列号 = Range("A4").End(xlToRight).Column
列名 = Columns(最后列号).Address
Sheets("金额").Select
最后行号 = Range("C4").End(xlDown).Row
Range("E5").Select
ActiveCell.Formula = "=SUMIF(透视表!A:A,B:B,透视表!"
& 列名 & ")"
Selection.AutoFill Destination:=Range("E5:E" &
最后行号) '填充
消除表内容:
ActiveSheet.Cells.Clear
消除内容:
Selection.ClearContents
把每个数字转换成9位字符,不足者前面添0, 在单元格输入公式:
=REPT(0,9-LEN(A23)) &A23
用代码简化输入(在[代码]工作表中有A列代码,B列名称)
在工作表A列输入代码后,在B列得出名称,B2单元格输入公式:
=IF(ISERROR(VLOOKUP(A2,代码!A:B,2,FALSE)),"",VLOOKUP(A2,代码!A:B,2,FALSE))
冻结窗口
查找包括X的单元格
Cells.Find(what:="X").Activate
列 = ActiveCell.Column
行 = ActiveCell.Row
或:
行号 = Cells.Find(what:="X").Row
列号 = Cells.Find(what:="X").Column
通过短名(简称)求长名代码
=LOOKUP(0,0*FIND(简称!$A$2:$A$112,A3),简称!$B$2:$B$112)
其中:[简称!$A$2:$A$112] 为简称,[简称!$B$2:$B$112] 为行号,A3为网点全名
==================================================================================================
Sub 复制表1已用区域值到表2A1(源薄名 As String, 源表名 As String, 目标薄名 As
String, 目标表名 As String)
Windows(源薄名).Activate
With Sheets(源表名).UsedRange '整个已用区域,自动计算区域大小
End With
End Sub
==================================================================================================
Sub 复制表1区域值到表2(源薄名 As String, 源表名 As String, 源区域 As String,
目标薄名 As String, 目标表名 As String, 目标左上格 As String)
'自动计算区域大小,目标区域只需定位左上角单元格
Windows(源薄名).Activate
Sheets(源表名).Select
Range(源区域).Select
With Selection '已选定区域
End With
End Sub
==================================================================================================
Sub 数组方式复制整表(源路径薄名 As String, 目标薄名 As String, 目标表名 As String)
'比较快
'SUB:源薄名调用前已打开,复制后关闭 复制值'
'要求: 目标区域只需定位左上角单元格
'调用: Call 数组方式复制整表(Worksheets("操作步骤").Range("G9").Value,
(WorkbookName主表), "表内人民币")
End Sub
==================================================================================================
Sub 数组方式复制区域值SUB(源薄名 As String, 源表名 As String, 源区域 As String,
目标薄名 As String, 目标表名 As String, 目标区域 As String)
'SUB:源薄名调用前已打开不关闭 复制值'
'要求: 目标区域 大小 = 源区域 大小
'调用: Call 数组方式复制区域值SUB((Workbook模板20), "金融资产", "D4:AX82",
(WorkbookName日报表), "金融资产", "D4:AX82")
End Sub
==================================================================================================
Sub 数组方式复制区域值SUB2(源薄名 As String, 源表名 As String, 源区域 As String,
目标薄名 As String, 目标表名 As String, 目标左上格 As String)
'SUB:源薄名调用前已打开不关闭 复制值'
'要求: '自动计算区域大小,目标区域只需定位左上角单元格
'调用: Call 数组方式复制区域值SUB2((Workbook模板20), "金融资产", "D4:AX82",
(WorkbookName日报表), "金融资产", "D4")
End Sub
==================================================================================================
Sub 复制整表SUB(源薄名 As String, 源表名 As String, 目标薄名 As String, 目标表名
As String)
End Sub
================================================================================
Sub 复制区域SUB(源薄名 As String, 源表名 As String, 源区域 As String, 目标薄名
As String, 目标表名 As String, 目标区域 As String)
End Sub
================================================================================
文件是否存在
Sub TestFile()
End Sub
================================================================================
Function 工作表是否存在(表名 As String) As Boolean '自定义函数:
工作表是否存在
End Function
调用:
=====================================================================================
Function 工作簿是否打开(sWkbName As String) As Boolean '自定义函数:
工作簿是否打开
'如果要判断一个指定的工作簿是否打开,可以将下面的VBA代码放入标准模块中,然后在子过程中进行调用。
'如果目标工作簿已打开则返回TRUE,否则返回FALSE
End Function
================================================================================
Sub 返回模板1()
End Sub
=====================================================================================
Sub 打开或隐藏列()
End Sub
=======================================================
Sub 打开或隐藏无关表()
End Sub
=======================================================
Sub 另存并关闭()
End Sub
=======================================================
标题行输入:
=======================================================
Sub 设置片区汇总公式()
'用法: 先定位"分行汇总的单元格", 再运行本宏, 即可自动设置片区汇总公式
'分行汇总在最上面,片区汇总在网点下方(片区包含若干网点)
'MsgBox ActiveCell.Column
If MsgBox("设为合计汇总的单元格是:" & ActiveCell.Address
& "
列 = ActiveCell.Column
行0 = ActiveCell.Row
Dim A As Variant
'片区个数 = 14
A = Array(10, 5, 3, 3, 4, 1, 2, 3, 2, 2, 9, 6, 6, 6)
'各片区包含的网点个数(行)
行 = 行0
总计 = "=SUM("
For i = 0 To UBound(A) '确定数组的指定维的最大可用下标。
Next
Cells(行0, 列).Select '可行
ActiveCell.FormulaR1C1 = 总计 & ")"
End Sub
=========================================================
Sub 匹配简称获取行号Find()
N行数1 = Sheets("行名简称").UsedRange.Rows.Count
N行数2 = Sheets("操作表").UsedRange.Rows.Count
'清除B列
Sheets("操作表").Select
Range("B2:B" & N行数2).Select
Selection.ClearContents
Dim W行名简称 As Worksheet
Set W行名简称 = Worksheets("行名简称")
Dim W操作表 As Worksheet
Set W操作表 = Worksheets("操作表")
For i = 2 To N行数1
Next i
MsgBox "OK !"
End Sub
===========================================================================
问题一:在VBA代码中,如何引用当前工作表中的单个单元格(例如引用单元格C3)?
回答:可以使用下面列举的任一方式对当前工作表中的单元格(C3)进行引用。
(1) Range("C3")
(2) [C3]
(3) Cells(3, 3)
(4) Cells(3, "C")
(5) Range("C4").Offset(-1)
Range("D3").Offset(, -1)
Range("A1").Offset(2, 2)
(6) 若C3为当前单元格,则可使用:ActiveCell
(7) 若将C3单元格命名为“Range1”,则可使用:Range("Range1")或[Range1]
(8) Cells(4, 3).Offset(-1)
(9) Range("A1").Range("C3")
**************************************************************************************************
Sub 读写机构号()
'
' 宏由 gd-wenbirong 录制,时间: 2012-12-24
'
' (13180-BEPD0010)
'
'用Excel打开往账清单.txt,按空格符分列,运行这个宏,
'排序,删除无用行,透视表,关联网点名,OK
'
C机构号 = ""
For i = 1 To 1832
Next i
End Sub
=======================================
Sub 基金透视表()
'
' Macro4 Macro
' 宏由 gd-wenbirong 录制,时间: 2012-12-4
'
'
End Sub
===========================================================================
Sub test运行时间()
Application.ScreenUpdating = False '是否显示屏幕变化
xls1 = "模板1.xls"
xls2 = "模板20.xls"
tim = Timer
For i = 1 To 100
Call 复制表1区域值到表2((xls2), "金融资产", "D4:AX82", (xls1), "金融资产",
"D4")
Next
MsgBox Format(Timer - tim, "0.00") & "秒"
tim = Timer
For i = 1 To 100
Call 数组方式复制区域值SUB((xls2), "金融资产", "D4:AX82", (xls1), "金融资产",
"D4:AX82")
Next
MsgBox Format(Timer - tim, "0.00") & "秒"
Application.ScreenUpdating = True
End Sub
|
|