MySheetRange″A2″Value200
Excel宏技巧
Excel宏技巧II自动隐藏表格中无数据的行表1 是数据源,经常改变;表2 引用表1 中某列有数据的单元格(利用动态位址已实现。
)由于表1 的改变,表2 的大小随之而变。
问题:如何实现表2 中没有数据的行(有公式)自动隐藏?谢谢赐教!Sub abc()For i = 1 To 300If Cells(i, 1).value = "" Then Rows(i).Hidden = TrueNext iEnd Sub你写的语句可以解决隐藏的问题,可是如果我执行了它之后,再在表1中增加数据,表2不会自动显示有了数据的行。
如何修改?将此宏设为自动运行(打开文件时)Sub abc()For i = 1 To 300If Cells(i, 1).value <>"" Then Rows(i).Hidden = falseNext iEnd Sub用VBA如何自动合并列的内容?Sub MergeTest()For i = 3 To 30Cells(i, 3) = Cells(i, 1) & Chr(10) & Cells(i, 2)NextEnd Sub基于VB和EXCEL的报表设计及打印在现代管理信息系统的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表提供给领导决策参考,或进行外部交流。
在Visual Basic中制作报表,通常是用数据环境设计器(DataEnvironment Designer)与数据报表设计器(Data Report Designer),或者使用第三方产品来完成。
但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。
由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输出。
Range单元格对象方法(二)AutoFilter自动筛选
Range单元格对象⽅法(⼆)AutoFilter⾃动筛选⼤家好,今天继续介绍单元格对象的常⽤⽅法,本节主要介绍⾃动筛选AutoFilter⽅法。
平时使⽤excel时,⾃动筛选是经常⽤到的功能,下⾯将⽤代码来实现⾃动筛选功能。
⾃动筛选功能⾸先简单看下平时使⽤的⾃动筛选,点击数据选项卡中的筛选。
在excel表格表头部分会⾃动出现筛选的倒三⾓符号。
点击筛选倒三⾓符号的下拉菜单可以看到有排序⽅式。
以及⽂本和数字的筛选条件等。
进⾏数据筛选时是选择⼀列或多列按某条件来筛选。
平时⽐较常⽤,就不再演⽰。
可以注意下⾃定义筛选界⾯。
可以设置两个筛选条件,两个条件有“与”“或”两种关系,同时对于字符,也⽀持通配符?代表单个字符 * 代表任意多个字符。
这有助于接下来的学习。
⾃动筛选AutoFilter⽅法下⾯就学习如果通过VBA代码来实现单元格的⾃动筛选⽅法。
先看单元格的⾃动筛选autofilter⽅法的语法格式,(参数较多,是可以根据需要省略)AutoFliter(field,criteria1,operator,criteria2,visibledropdown)1、参数field:指筛选的字段所在的列的数值。
2、参数criteria1和criteria2是两个指定的判断条件(为字符串形式)。
参数criteria1是必须的,参数criteria2是可选项,两个条件的关系由operator决定。
⽽参数operator是xltop10ltems等时,参数criteria1是指定项⽬数量。
3、参数operator,是指定筛选类型,为xlautofilteroperator常量之⼀。
下⾯的值根据需要进⾏选择。
(主要是前六个,下⾯⽰例帮助理解。
)4、visibledropdown参数的默认值为ture是限制筛选的下拉箭头,值为false时,隐藏筛选字段的下拉箭头。
当所有autofliter所有参数均省略时,只出现字段筛选下拉箭头。
python处理excel文件(xls和xlsx)
python处理excel⽂件(xls和xlsx)⼀、xlrd和xlwt使⽤之前需要先安装,windows上如果直接在cmd中运⾏python则需要先执⾏pip3 install xlrd和pip3 install xlwt,如果使⽤pycharm则需要在项⽬的解释器中安装这两个模块,File-Settings-Project:layout-Project Interpreter,点击右侧界⾯的+号,然后搜索xlrd和xlwt,然后点击Install Package进⾏安装。
对于excel来说,整个excel⽂件称为⼯作簿,⼯作簿中的每个页称为⼯作表,⼯作表⼜由单元格组成。
对于xlrd和xlwt,⾏数和列数从0开始,单元格的⾏和列也从0开始,例如sheet.row_values(2)表⽰第三⾏的内容,sheet.cell(1,2).value表⽰第⼆⾏第三列单元格的内容。
1.xlrd模块读取excel⽂件使⽤xlrd模块之前需要先导⼊import xlrd,xlrd模块既可读取xls⽂件也可读取xlsx⽂件。
获取⼯作簿对象:book = xlrd.open_workbook('excel⽂件名称')获取所有⼯作表名称:names = book.sheet_names(),结果为列表根据索引获取⼯作表对象:sheet = book.sheet_by_index(i)根据名称获取⼯作表对象:sheet = book.sheet_by_name('⼯作表名称')获取⼯作表⾏数:rows = sheet.nrows获取⼯作表列数:cols = sheet.ncols获取⼯作表某⼀⾏的内容:row = sheet.row_values(i) ,结果为列表【sheet.row(i),列表】获取⼯作表某⼀列的内容:col = sheet.col_values(i) 结果为列表【sheet.col(i),列表】获取⼯作表某⼀单元格的内容:cell = sheet.cell_value(m,n)、 sheet.cell(m,n).value、sheet.row(m)[n].value,sheet.col(n)[m].value,结果为字符串或数值【sheet.cell(0,0),xlrd.sheet.Cell对象】⽰例:假设在py执⾏⽂件同层⽬录下有⼀fruit.xls⽂件,有三个sheet页Sheet1、Sheet2、Sheet3,其中Sheet1内容如下:import xlrdbook = xlrd.open_workbook('fruit.xls')print('sheet页名称:',book.sheet_names())sheet = book.sheet_by_index(0)rows = sheet.nrowscols = sheet.ncolsprint('该⼯作表有%d⾏,%d列.'%(rows,cols))print('第三⾏内容为:',sheet.row_values(2))print('第⼆列内容为%s,数据类型为%s.'%(sheet.col_values(1),type(sheet.col_values(1))))print('第⼆列内容为%s,数据类型为%s.'%(sheet.col(1),type(sheet.col(1))))print('第⼆⾏第⼆列的单元格内容为:',sheet.cell_value(1,1))print('第三⾏第⼆列的单元格内容为:',sheet.cell(2,1).value)print('第五⾏第三列的单元格内容为:',sheet.row(4)[2].value)print('第五⾏第三列的单元格内容为%s,数据类型为%s'%(sheet.col(2)[4].value,type(sheet.col(2)[4].value)))print('第五⾏第三列的单元格内容为%s,数据类型为%s'%(sheet.col(2)[4],type(sheet.col(2)[4])))# 执⾏结果# sheet页名称: ['Sheet1', 'Sheet2', 'Sheet3']# 该⼯作表有5⾏,3列.# 第三⾏内容为: ['梨', 3.5, 130.0]# 第⼆列内容为['单价/元', 8.0, 3.5, 4.5, 3.8],数据类型为<class 'list'>.# 第⼆列内容为[text:'单价/元', number:8.0, number:3.5, number:4.5, number:3.8],数据类型为<class 'list'>.# 第⼆⾏第⼆列的单元格内容为: 8.0# 第三⾏第⼆列的单元格内容为: 3.5# 第五⾏第三列的单元格内容为: 300.0# 第五⾏第三列的单元格内容为300.0,数据类型为<class 'float'># 第五⾏第三列的单元格内容为number:300.0,数据类型为<class 'xlrd.sheet.Cell'>xlrd读取excel⽰例可以看出通过sheet.row(i)、sheet.col(i)也可获取⾏或列的内容,并且结果也是⼀个列表,但是列表中的每⼀项类似字典的键值对,形式为数据类型:值。
Excel VBA编程 优化对象引用
Excel VBA编程优化对象引用使用Excel VBA编写的程序,其中有很多语句都在反复操作各种不同的对象。
而使用对象的语句,执行速度很慢,因此,合理对对象进行优化可使程序效率更高。
在程序中合理使用对象,应注意以下问题。
1.使用对象变量如果一个对象引用被多次使用,则可以通过定义一个局部变量,将此对象用Set 设置为对象变量,以减少对对象的访问。
如:ActiveSheet.Range("A1").Value = 100ActiveSheet.Range("A2").Value = 200则以下代码要比上面的要快:Dim objSheet As ObjectSet objSheet = ActiveSheetobjSheet.Range("A1").Value = 100objSheet.Range("A2").Value = 2002.使用With … End With语句对某个对象的多个属性进行设置时,可使用With … End With语句来引用这个对象。
使用该语句只需要一次引用就可以对多个属性进行设置,对一个属性或多个属性的设置所使用的时间几乎是相同的,因而,省去了引用对象所使用的时间。
例如以下语句,可以通过替换为With 语句,提高运行效率:ActiveSheet.Range("A1:A1000") = "Arial"ActiveSheet.Range("A1:A1000").Font.FontStyle = "Bold"对应的With 语句:With ActiveSheet.Range("A1:A1000").Font.Name = "Arial".FontStyle = "Bold"End With3.使用早期绑定绑定是将程序员编写的函数调用与实现该函数的实际代码(内部或外部代码)进行匹配的过程。
vb操作excel的常见方法
2.使用对象变量。
如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少 对对象的访问。如: Workbooks(1).Sheets(1).Range(″A1″).Value = 100 Workbooks(1).Sheets(1).Range(″A2″).Value = 200 则以下代码比上面的要快: Set MySheet = Workbooks(1).Sheets(1) MySheet.Range(″A1″).Value = 100 MySheet.Range(″A使用定时器
如用何过在EExxcceell里97使里用的定加时载器宏 "定时保存" 吗?可惜它的源程序是加密的,现在就上传一篇介绍实 现在它O的ffic文e 档里。有个方法是 application.ontime ,具体函数如下: expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) 如这果个想函进数一是步用了来解安,排请一参个阅过程Ex在ce将l 的来帮的助特。定时间运行,(可为某个日期的指定时间,也可为 指定的时间段之后)。通过这个函数我们就可以在 Excel 里编写自己的定时程序了。下面就举 两1.在个下例午子来17说:00明:0它0 的。时候显示一个对话框。 Sub Run_it() Application.OnTime TimeValue("17:00:00"), "Show_my_msg" '设置定时器在 17:00:00 激活,激活后运行 Show_my_msg 。 End Sub Sub Show_my_msg() msg = MsgBox("现在是 17:00:00 !", vbInformation, "自定义信息") End Sub 2.模仿 Excel 97 里的 "自动保存宏",在这里定时 5 秒出现一次 Sub auto_open() MsgBox "欢迎你,在这篇文档里,每 5 秒出现一次保存的提示!", vbInformation, "请注意!" Call runtimer '打开文档时自动运行 End Sub Sub runtimer() Application.OnTime Now + TimeValue("00:00:05"), "saveit" ' Now + TimeValue("00:15:00") 指定在当前时间过 5 秒钟开始运行 Saveit 这个过程。 End Sub Sub SaveIt() msg = MsgBox("朋友,你已经工作很久了,现在就存盘吗?" & Chr(13) _ & "选择是:立刻存盘" & Chr(13) _ & "选择否:暂不存盘" & Chr(13) _ & "选择取消:不再出现这个提示", vbYesNoCancel + 64, "休息一会吧!") '提示用户保存当前活动文档。
python中range函数的用法
python中range函数的用法Python是一种高级编程语言,它具有易学、易读、易用等特点,因此在编程领域中得到了广泛的应用。
在Python中,range()函数是一种非常常用的函数,它可以用来生成一系列数字,从而方便我们进行循环、计数等操作。
本文将详细介绍range()函数的用法,希望能对初学者有所帮助。
一、range()函数的基本用法range()函数是Python中的一个内置函数,它可以用来生成一个数字序列。
它的基本语法如下:range(stop)其中,stop参数是必须的,它表示生成数字序列的终止值,但不包括该值。
例如,如果我们想要生成一个从0到9的数字序列,可以使用以下代码:for i in range(10):print(i)输出结果为:12345789在这个例子中,range()函数的参数是10,表示生成的数字序列的终止值为10。
由于range()函数默认从0开始生成数字序列,因此生成的数字序列是从0到9。
除了stop参数外,range()函数还可以接受start和step两个可选参数:range(start, stop, step)其中,start参数表示生成数字序列的起始值,默认为0;stop 参数表示生成数字序列的终止值,但不包括该值,与基本用法相同;step参数表示生成数字序列的步长,默认为1。
例如,如果我们想要生成一个从2到20的数字序列,步长为2,可以使用以下代码:for i in range(2, 21, 2):print(i)输出结果为:24681214161820在这个例子中,range()函数的start参数是2,stop参数是21,step参数是2,表示生成的数字序列从2开始,每次增加2,直到20为止。
二、range()函数的应用1. 循环range()函数最常见的用途是在循环中使用,例如:for i in range(10):print('第', i+1, '次循环')在这个例子中,我们使用range()函数生成一个从0到9的数字序列,然后在循环中使用这个数字序列进行计数。
vba中range对象的方法
vba中range对象的方法在VBA中,`Range` 对象是用来引用Excel工作表中的一个或多个单元格的方法。
`Range` 对象有很多方法和属性,可以用来获取和设置单元格的值,格式等。
以下是一些常用的 `Range` 对象的方法:1. Value: 获取或设置单元格的值。
```vbaRange("A1").Value = "Hello" ' 设置A1单元格的值为"Hello"MsgBox Range("A1").Value ' 显示A1单元格的值```2. Text: 获取或设置单元格的文本值。
```vbaRange("A1").Text = "Hello" ' 设置A1单元格的文本为"Hello"MsgBox Range("A1").Text ' 显示A1单元格的文本值```3. Font: 获取或设置单元格中的文本的字体。
```vbaRange("A1"). = True ' 使A1单元格的文本加粗```4. Interior: 获取或设置单元格的背景色。
```vbaRange("A1"). = RGB(255, 0, 0) ' 设置A1单元格的背景色为红色```5. Border: 获取或设置单元格的边框。
```vbaWith Range("A1").Borders(xlEdgeBottom).LineStyle = xlContinuous ' 设置底部边框为连续线.Weight = xlThin ' 设置边框粗细为细线End With```6. Resize: 调整 `Range` 的大小。
```vbaRange("A1:B2").Resize(, 3).Value = "New Value" ' 将A1:B2的范围调整为3列宽,并设置新值```7. EntireColumn/EntireRow: 获取或设置整个列或行的属性。
VBA-for-EXCEL-教程
1.6 编辑录制的代码
在上一节,我们录制了一个宏并查看了代码,代码中有两句实际上并不起作用。哪两
句?现在,在宏中作一个修改,删除多余行,直到和下面代码相同:
Sub 改变颜色() ' ' 改变颜色 Macro ' xw 记录的宏 2000-6-10 '
' With Selection.Interior .ColorIndex = 3 End With End Sub
EXCEL已经具备这些基本功能,你要做的只是使用它.
1.3 录制简单的宏
在介绍学习VBA之前,应该花几分钟录制一个宏。
新术语:“宏”,指一系列EXCEL能够执行的VBA语句。
以下将要录制的宏非常简单,只是改变单元格颜色。请完成如下步骤:
1)打开新工作簿,确认其他工作簿已经关闭。
2)选择A1单元格。调出“常用”工具栏。
将来会十分熟悉这种代码,虽然现在它们看上去像一种奇怪的外语。学习VBA或编 程语言在某种程度上比较像在学习一种外语。
Sub 改变颜色():这是宏的名称。 中间的以“ '”开头的五行称为“注释”,它在录制宏时自动产生。 以With 开头到End With 结束的结构是With结构语句,这段语句是宏的主要部
几种如何把别的工作表 Sheet4 数据, 读到这个工作表的方法:
在被读取的单元格前加上工作表名称 Sheet4。 Public Sub Writes() 1-- 2 方法,最简单在被读取的 "[ ]" 前加上被读取的工作表名称 Sheet4。 1 [A1] = Sheet4.[A1] '把Sheet4 A1 单元格的数据,读到 A1单元格。 2 [A2:A4] = Sheet4.[B1] ''把 Shee4 工作表单元格 B1 数据,读到 A2:A4 单元格。 3-- 4 方法,在被读取的工作表 Range(" ")的 Range 前加上被读取的工作表名称Sheet4。 3 Range("B1") = Sheet4.Range("B1") ''把 Shee4工作表单元格 B1 数据,读到 B1 单元格。 4 Range("C1:C3") = Sheet4.Range("C1") '把 Shee4 工作表单元格 C1 数据,读到 C1:C3 单元格。 5-- 6 方法,在被读取的工作表 Cells(Row,Column),Cells 前加上被读取工作表名称 Sheet4。 5 Cells(1, 4) = Sheet4.Cells(1, 4) '把 Shee4 工作表单元格 D1 数据,读到 D1 单元格。 6 Range(Cells(1, 5), Cells(5, 5)) = Sheet4.Cells(1, 5) '把 Shee4 工作表单元格 E1 数据, 读到 E1:E 5单元格。 End Sub
WithSheets″Sheet3″
With Sheets(″Sheet3″)
.Range(″A1″).Value = 100
.Range(″A2″).Value = 200
End With
方法4:关闭屏幕更新
如果你的VBA程序前面三条做得比较差,则关闭屏幕更新是提高VBA程序运行速度的最有
效的方法,缩短运行时间2/3左右。
关闭屏幕更新的方法:
Application.ScreenUpdate = False
请不要忘记VBA程序运行结束时再将该值设回来:
Application.ScreenUpdate = True
以上是提高VBA运行效率的比较有效的几种方法。
第七课如何在Excel里使用定时器
用过Excel 97 里的加载宏"定时保存" 吗?可惜它的源程序是加密的,现在就上传一篇
介绍实现它的文档。
在Office 里有个方法是application.ontime ,具体函数如下:
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
如果想进一步了解,请参阅Excel 的帮助。
在VBA中使用Excel工作表公式
在VBA中使用Excel工作表公式在VBA中可以利用Excel工作表函数的强大功能,将VBA和Excel公式与函数联合,使得应用程序更为强大和灵活。
使用WorksheetFunction对象WorksheetFunction对象的成员就是Excel内置函数,因此,利用该对象可以直接在VBA中使用这些函数。
例如,求单元格区域A1:A5的数值之和,假如将该区域命名为“myRange”,则可以在VBA 中使用下列代码:Application.WorksheetFunction.Sum(Range("myRange"))Application.WorksheetFunction.Sum(Range("A1:A5"))注意,在VBA中当输入WorksheetFunction后再输入一个句点时,就会显示所有的函数列表,如下图1所示。
图1:显示VBA可用工作表函数列表Evaluate方法使用Worksheet对象或Application对象的Evaluate函数。
该函数接受字符串参数,返回引用的公式的值(字符串为公式)或者引用的单元格区域(字符串代表单元格或单元格区域,A1样式)。
其语法为:表达式.Evaluate(Name)将Excel名称转换为对象或值,其中:表达式对于Application,表达式可选;对于Chart、DialogSheet和Worksheet,表达式必需。
Name必需的字符串。
满足Excel命名规范的对象的名称,包括:(1)A1样式引用。
可以以A1样式的引用方式使用任意对单个单元格的引用,引用都被考虑是绝对引用。
(2)单元格区域。
可以使用区域、交叉和联合操作符(冒号、空格和逗号)引用单元格区域。
(3)定义的名称。
(4)外部引用。
可以使用!操作符引用另一工作簿中的单元格或定义的名称。
例如Evaluate("[BOOK1.XLS]Sheet1!A1")。
EXCEL宏编程简明教程(有实例)
Excel宏编程简明教程一)、宏学习首先需要明确的是,本文不可能教会您关于宏的所有内容。
您需要学会利用"录制宏"的方法来学习宏:点击Excel"工具"下拉菜单中"宏"下?quot;录制新宏",此后可象平时一样进行有关操作,待完成后停止录制。
然后再点击"工具"下拉菜单中"宏"下"宏"的"编辑"选项即可打开刚才所录制的宏的Visual Basic源程序,并且可以在此时的"帮助"下拉菜单中获得有关的编程帮助。
对录制宏进行修改不仅可以学习宏的使用,还能大大简化宏的编写。
二)、基本概念为了学习Excel中的宏,我们需要先了解以下一些基本概念。
1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbookWorkbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。
在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks(1)、Workbooks("年度报表.xls")。
而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。
2、工作表:Worksheets、Worksheet、ActiveSheetWorksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。
基于Excel VBA的成绩管理系统的探索与实现
2020年11月25日第4卷第22期现代信息科技Modern Information TechnologyNov.2020 Vol.4 No.22112020.11收稿日期:2020-09-28基金项目:云南省教育厅科学研究基金项目(2020J1176)基于Excel VBA的成绩管理系统的探索与实现杨发友,曹瀚天,黄恩相,张光福,铁卫华(云南水利水电职业学院,云南 昆明 650499)摘 要:文章以云南水利水电职业学院的成绩管理为研究对象,以Excel 2010为平台,采用VBA 编程,设计了一款能够自动汇总班级成绩并可以统计出补考学生名单的成绩管理系统。
利用Excel VBA 实现学生成绩管理的自动化处理,提高工作效率和数据处理能力,加强数据处理结果的准确性,实现学生成绩信息管理工作流程的系统化、规范化和自动化,降低工作量,提高工作效率。
关键词:VBA ;自动生成;排版;成绩管理中图分类号:TP311.52文献标识码:A文章编号:2096-4706(2020)22-0011-05Exploration and Implementation of Achievement Management SystemBased on Excel VBAYANG Fayou ,CAO Hantian ,HUANG Enxiang ,ZHANG Guangfu ,TIE Weihua (Yunnan Water Resources and Hydropower Vocational College ,Kunming 650499,China )Abstract :The article takes the achievement management of Yunnan Water Resources and Hydropower Vocational College asthe research object ,uses Excel 2010 as the platform ,and uses VBA programming to design a achievement management system that can automatically summarize class results and make statistics on the list of students who take the retake exam. Using Excel VBA to realize the automatic processing of student achievement management ,improve work efficiency and data processing ability ,strengthen the accuracyof data processing results ,realize the systematization ,standardization and automation of student achievement information management workflow ,reduce workload and improve work efficiency.Keywords :VBA ;automatic generation ;typesetting ;achievement management0 引 言经过多年的教育信息化发展,以互联网为基础的成绩管理系统在各级各类学校中得到了普及。
VBA常用代码解析
EXCEL VBA常用代码解析Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,甚至是多个工作表上的一组单元格,在操作Excel 内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性。
▲001 单元格的引用方法在VBA中经常需要引用单元格或单元格区域区域,主要有以下几种方法。
001-1 使用Range属性VBA中可以使用Range属性返回单元格或单元格区域,如下面的代码所示。
Sub RngSelect()Sheet1.Range("A3:F6,B1:C5").SelectEnd Sub代码解析:RangeSelect过程使用Select方法选中A3:F6,B1:C5单元格区域。
Range属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:Range(Cell1,Cell2)参数Cell1是必需的,必须为A1 样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。
也可包括美元符号(即绝对地址,如“$A$1”)。
可在区域中任一部分使用局部定义名称,如Range("B2:LastCell"),其中LastCell为已定义的单元格区域名称。
参数Cell2是可选的,区域左上角和右下角的单元格。
运行RangeSelect过程,选中A3:F6,B1:C5单元格区域。
001-2 使用Cells属性使用Cells属性返回一个Range对象,如下面的代码所示。
Sub Cell()Dim icell As IntegerFor icell = 1 To 100Sheet2.Cells(icell,1).Value = icellNextEnd Sub代码解析:Cell过程使用For...Next语句为工作表中的A1:A100单元格区域填入序号。
ExcelVBA多工作簿多工作表汇总实例集锦
E x c e l V B A多工作簿多工作表汇总实例集锦 LELE was finally revised on the morning of December 16, 20201,多工作表汇总(Consolidate)‘&ID=110630&page=1‘两种写法都要求地址用R1C1形式,各个表格的数据布置有规定。
Sub ConsolidateWorkbook()Dim RangeArray() As StringDim bk As WorksheetDim sht As WorksheetDim WbCount As IntegerSet bk = Sheets("汇总")WbCount =ReDim RangeArray(1 To WbCount - 1)For Each sht In SheetsIf <> "汇总" Theni = i + 1RangeArray(i) = "'" & & "'!" & _("A1").(ReferenceStyle:=xlR1C1)End IfNext("A1").Consolidate RangeArray, xlSum, True, True[a1].Value = "姓名"End SubSub sumdemo()Dim arr As Variantarr = Array("一月!R1C1:R8C5", "二月!R1C1:R5C4", "三月!R1C1:R9C6") With Worksheets("汇总").Range("A1").Consolidate arr, xlSum, True, True.Value = "姓名"End WithEnd Sub2,多工作簿汇总(Consolidate)‘多工作簿汇总Sub ConsolidateWorkbook()Dim RangeArray() As StringDim bk As WorkbookDim sht As WorksheetDim WbCount As IntegerWbCount =ReDim RangeArray(1 To WbCount - 1)For Each bk In Workbooks '在所有工作簿中循环If Not bk Is ThisWorkbook Then '非代码所在工作簿 Set sht = (1) '引用工作簿的第一个工作表i = i + 1RangeArray(i) = "'[" & & "]" & & "'!" & _("A1").(ReferenceStyle:=xlR1C1)End IfNextWorksheets(1).Range("A1").Consolidate _RangeArray, xlSum, True, TrueEnd Sub3,多工作簿汇总(FileSearch)‘2007-1-1‘help\汇总表.xlsSub pldrwb0531()'汇总表.xls'导入指定文件的数据Dim myFs As FileSearchDim myPath As String, Filename$Dim i As Long, n As LongDim Sht1 As Worksheet, sh As WorksheetDim aa, nm$, nm1$, m, arr, r1, col1%= FalseSet Sht1 = ActiveSheetSet myFs =myPath =With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = "*.xls"If .Execute(SortBy:=msoSortByFileName) > 0 Then n = .col1 = 2ReDim myfile(1 To n) As StringFor i = 1 To nmyfile(i) = .FoundFiles(i)Filename = myfile(i)aa = InStrRev(Filename, "\")nm = Right(Filename, Len(Filename) - aa)nm1 = Left(nm, Len(nm) - 4)If nm1 <> "汇总表" Thenmyfile(i)Dim wb As WorkbookSet wb = ActiveWorkbookm = [a65536].End(xlUp).Rowarr = Range(Cells(3, 3), Cells(m, 3))col1 = col1 + 1Cells(2, col1) = nm '自动获取文件名Cells(3, col1).Resize(UBound(arr), 1) = arr savechanges:=FalseSet wb = NothingEnd IfNextElseMsgBox "该文件夹里没有任何文件"End IfEnd With[a1].SelectSet myFs = Nothing= TrueEnd Sub‘根据上例增加了在一个工作簿中可选择多个工作表进行汇总,运用了文本框多选功能Public ar, ar1, nm$Sub pldrwb0531()'汇总表.xls'导入指定文件的数据(默认工作表1的数据)'直接从C列依次导入Dim myFs As FileSearchDim myPath As String, Filename$Dim i As Long, n As LongDim Sht1 As Worksheet, sh As WorksheetDim aa, nm1$, m, arr, r1, col1%= FalseOn Error Resume NextSet Sht1 = ActiveSheetSet myFs =myPath =With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = "*.xls"If .Execute(SortBy:=msoSortByFileName) > 0 Thenn = .col1 = 2ReDim myfile(1 To n) As StringFor i = 1 To nmyfile(i) = .FoundFiles(i)Filename = myfile(i)aa = InStrRev(Filename, "\")nm = Right(Filename, Len(Filename) - aa)nm1 = Left(nm, Len(nm) - 4)If nm1 <> "汇总表" Thenmyfile(i)Dim wb As WorkbookSet wb = ActiveWorkbookFor Each sh In Sheetss = s & & ","Nexts = Left(s, Len(s) - 1)ar = Split(s, ",")For j = 0 To UBound(ar1)If = 9 Then GoTo 100Set sh = (ar1(j))m = sh.[a65536].End(xlUp).Rowarr = Range(Cells(3, 3), Cells(m, 3))col1 = col1 + 1Cells(2, col1) = sh.[a1]Cells(3, col1).FormulaR1C1 = "=[" & nm & "]" & ar1(j) & "!RC3" ‘显示引用的工作簿工作表及单元格地址Cells(3, col1).AutoFill Range(Cells(3, col1), Cells(UBound(arr) + 2, col1))‘Cells(3, col1).Resize(UBound(arr), 1) = arrNext j100: savechanges:=FalseSet wb = Nothings = ""If VarType(ar1) = 8200 Then Erase ar1End IfNextElseMsgBox "该文件夹里没有任何文件"End IfEnd With[a1].SelectSet myFs = Nothing= TrueEnd SubPrivate Sub CommandButton1_Click()For i = 0 To - 1If (i) = True Thens = s & (i) & ","End IfNext iIf s <> "" Thens = Left(s, Len(s) - 1)ar1 = Split(s, ",")MsgBox "你选择了 " & sUnload UserForm1Elsemg = MsgBox("你没有选择任何工作表!需要重新选择吗 ", vbYesNo, "提示") If mg = 6 ThenElseUnload UserForm1End IfEnd IfEnd SubPrivate Sub CommandButton2_Click()Unload UserForm1End SubPrivate Sub UserForm_Initialize()With.List = ar ‘文本框赋值.ListStyle = 1 ‘文本前加选择小方框.MultiSelect = 1 ‘设置可多选End With= & nmEnd Sub4,多工作表汇总(字典、数组)‘&pid=2928374&page=1&extra=page%3D1‘Data多表汇总Sub dbhz()'多表汇总Dim Sht1 As Worksheet, Sht2 As Worksheet, Sht As WorksheetDim d, k, t, Myr&, Arr, x= False= FalseSet d = CreateObject("")For Each Sht In Sheets ‘删除同名的表格,获得要增加的汇总表格不重复名字 If InStr, "-") > 0 Then : GoTo 100nm = Mid(Sht.[a3], 7)d(nm) = ""100:Next Sht= Truek =For i = 0 To UBound(k)after:=SheetsSet Sht1 = ActiveSheet= Replace(k(i), "/", "-") ‘增加汇总表,把名字中的”/”(不能用作表名的)改为”-“Next iErase kSet d = NothingFor Each Sht In SheetsWith Sht.ActivateIf InStr(.Name, "-") = 0 Thennm = Replace(Mid(.[a3], 7), "/", "-")Myr = .[h65536].End(xlUp).RowArr = .Range("d10:h" & Myr)Set d = CreateObject("")For i = 1 To UBound(Arr)x = Arr(i, 1)If Not (x) Thenx, Arr(i, 5)Elsed(x) = d(x) + Arr(i, 5)End IfNextk =t =Set Sht2 = Sheets(nm)myr2 = [a65536].End(xlUp).Row + 1If myr2 < 9 ThenCells(9, 1).Resize(1, 2) = Array("PartNo.", "TTL Qty") Cells(10, 1).Resize(UBound(k) + 1, 1) = (k)Cells(10, 2).Resize(UBound(t) + 1, 1) = (t)ElseCells(myr2, 1).Resize(UBound(k) + 1, 1) = (k)Cells(myr2, 2).Resize(UBound(t) + 1, 1) = (t)End IfErase kErase tSet d = NothingEnd IfEnd WithNext Sht= TrueEnd Sub5,多工作簿提取指定数据(FileSearch)‘2011-8-31‘9188-1-1 GetData()Dim Brrbz(1 To 200, 1 To 19), Brrgr(1 To 500, 1 To 23)Dim myFs As FileSearch, myfileDim myPath As String, Filename$, wbnm$Dim i&, n&, mm&, aa$, nm1$, j&Dim Sht1 As Worksheet, sh As Worksheet, wb1 As Workbook = FalseSet wb1 = ThisWorkbookwbnm = Left, Len - 4)Set Sht1 = ActiveSheetSht1.[a2:w200] = ""aa = Left, 2)Set myFs =myPath = & "\"With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = "*.xls".SearchSubFolders = TrueIf .Execute(SortBy:=msoSortByFileName) > 0 Thenn = .ReDim myfile(1 To n) As StringFor i = 1 To nmyfile(i) = .FoundFiles(i)Filename = myfile(i)nm1 = Split(Mid(Filename, InStrRev(Filename, "\") + 1), ".")(0) If nm1 = wbnm Then GoTo 200myfile(i)Dim wb As WorkbookSet wb = ActiveWorkbookFor Each sh In SheetsIf InStr, aa) ThenIf aa = "班子" Thenmm = mm + 1Brrbz(mm, 1) = [b2].ValueFor j = 2 To 18 Step 2If j < 10 ThenBrrbz(mm, j) = Cells(j / 2 + 34, 11).ValueElseBrrbz(mm, j) = Cells(j / 2 + 34, 9).ValueEnd IfNextGoTo 100ElseIf [b2] = "" Then GoTo 50mm = mm + 1Brrgr(mm, 1) = [b2].ValueBrrgr(mm, 2) = [e38].ValueBrrgr(mm, 3) = [i38].ValueFor j = 4 To 18 Step 2If j < 12 ThenBrrgr(mm, j) = Cells(j / 2 + 38, 8).ValueElseBrrgr(mm, j) = Cells(j / 2 + 38, 7).ValueEnd IfNextFor j = 20 To 23Brrgr(mm, j) = Cells(j + 28, 8).ValueNextEnd IfEnd If50:Next100:savechanges:=FalseSet wb = Nothing200:NextElseMsgBox "该文件夹里没有任何文件"End IfEnd WithIf aa = "班子" Then[a2].Resize(mm, 19) = BrrbzElse[a2].Resize(mm, 23) = BrrgrEnd If[a1].SelectSet myFs = NothingEnd Sub‘2011-7-15‘&pid=5036524&page=1&extra=Sub pldrsj()'批量导入指定文件的数据Dim myFs As FileSearch, myfile, BrrDim myPath$, Filename$, nm2$Dim i&, j&, n&, aa$, nm$Dim Sht1 As Worksheet, sh As Worksheet = FalseSet Sht1 = ActiveSheetnm2 =Set myFs =myPath =With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = "*.xls".SearchSubFolders = TrueIf .Execute(SortBy:=msoSortByFileName) > 0 Then n = .ReDim Brr(1 To n, 1 To 2)ReDim myfile(1 To n) As StringFor i = 1 To nmyfile(i) = .FoundFiles(i)Filename = myfile(i)aa = InStrRev(Filename, "\")nm = Right(Filename, Len(Filename) - aa) '带后缀的Excel文件名If nm <> nm2 Thenj = j + 1myfile(i)Dim wb As WorkbookSet wb = ActiveWorkbookSet sh = ("Sheet1")Brr(j, 1) = nmBrr(j, 2) = sh.[c3].Valuesavechanges:=FalseSet wb = NothingEnd IfNextElseMsgBox "该文件夹里没有任何文件"End IfEnd With[a3].Resize(UBound(Brr), 2) = BrrSet myFs = Nothing= TrueEnd SubSub pldrsj0707()'6387-1-1'Report'批量导入指定文件的数据Dim myFs As FileSearch, myfileDim myPath As String, Filename$, ma&, mc&Dim i As Long, n As Long, nn&, aa$, nm$, nm1$Dim Sht1 As Worksheet, sh As Worksheet= FalseSet Sht1 = ActiveSheet: nn = 5Sht1.[b5:e27] = ""Set myFs =myPath = & "\data" ‘指定的子文件夹内搜索With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = "*.xls".SearchSubFolders = TrueIf .Execute(SortBy:=msoSortByFileName) > 0 Thenn = .ReDim myfile(1 To n) As StringFor i = 1 To nmyfile(i) = .FoundFiles(i)Filename = myfile(i)nm1=split(mid(filename,instrrev(filename,"\")+1),".")(0) 一句代码代替以下3句‘aa = InStrRev(Filename, "\")‘nm = Right(Filename, Len(Filename) - aa) '带后缀的Excel文件名‘nm1 = Left(nm, Len(nm) - 4) '去除后缀的Excel文件名If nm1 <> Thenmyfile(i)Dim wb As WorkbookSet wb = ActiveWorkbookFor Each sh In Sheetsma = [b65536].End(xlUp).RowIf ma > 6 Then ‘第6行是表头If ma > 10 Then ma = 10 ‘只要取4行数据For ii = 7 To ma(nn, 2).Resize(1, 3) = Cells(ii, 2).Resize(1, 3).Value(nn, 5) = Cells(ii, 6).Valuenn = nn + 1Next iiGoTo 100ElseGoTo 100End Ifmc = [d65536].End(xlUp).RowIf mc > 7 Then ‘第7行是表头If mc > 11 Then mc = 11 ‘只要取4行数据For ii = 8 To mc(nn, 2).Resize(1, 3) = Cells(ii, 4).Resize(1, 3).Value (nn, 5) = Cells(ii, 8).Valuenn = nn + 1Next iiGoTo 100ElseGoTo 100End If100:Next shsavechanges:=FalseSet wb = NothingEnd IfNextElseMsgBox "该文件夹里没有任何文件"End IfEnd With[a1].SelectSet myFs = Nothing= TrueEnd Sub‘&pid=3020658&page=1&extra=page%3D2‘Sub pldrsj0724()'批量导入指定文件的数据Dim myFs As FileSearch, myfile, Myr1&, ArrDim myPath$, Filename$, nm2$Dim i&, j&, n&, nn&, aa$, nm$, nm1$Dim Sht1 As Worksheet, sh As Worksheet= FalseSet Sht1 = ActiveSheetMyr1 = Sht1.[a65536].End(xlUp).RowArr = ("a3:b" & Myr1)("b3:b" & Myr1).ClearContentsnm2 = Left, Len - 4)Set myFs =myPath =With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = "*.xls"If .Execute(SortBy:=msoSortByFileName) > 0 Thenn = .ReDim myfile(1 To n) As StringFor i = 1 To nmyfile(i) = .FoundFiles(i)Filename = myfile(i)aa = InStrRev(Filename, "\")nm = Right(Filename, Len(Filename) - aa) '带后缀的Excel文件名 nm1 = Left(nm, Len(nm) - 4) '去除后缀的Excel文件名If nm1 <> nm2 Thenmyfile(i)Dim wb As WorkbookSet wb = ActiveWorkbookFor Each sh In SheetsFor j = 1 To UBound(Arr)If = Arr(j, 1) ThenSet r1 = Range("c:c").Findnn =Arr(j, 2) = Cells(nn, 9)GoTo 100End IfNext jNext sh100:savechanges:=FalseSet wb = NothingEnd IfNextElseMsgBox "该文件夹里没有任何文件"End IfEnd With[b3].Resize(UBound(Arr), 1) = (Arr, 0, 2)Set myFs = Nothing= TrueEnd Sub6,多工作表提取指定数据(数组)‘&pid=73718&page=1&extra=#pid73718Sub fpkf()= FalseDim Myr&, Arr, yf, x&, Myr1&, r1Dim Sht As WorksheetMyr = Sheet1.[b65536].End(xlUp).Row("c8:h" & Myr).ClearContentsArr = ("c8:h" & Myr)[j8].Formula = "=rc[-9]&""|""&rc[-8]"[j8].AutoFill Range("j8:j" & Myr)Range("j8:j" & Myr) = Range("j8:j" & Myr).ValueFor Each Sht In SheetsIf <> Thenyf = Left, Len - 2)Myr1 = [a65536].End(xlUp).Row - 1For x = 7 To Myr1If Cells(x, 1) <> "" ThenSet r1 = ("j:j").Find(Cells(x, 1) & "|" & Cells(x, 2)) If Not r1 Is Nothing ThenArr - 7, yf) = Cells(x, "ar")End IfEnd IfNext xEnd IfNext[c8].Resize(UBound(Arr), UBound(Arr, 2)) = Arr[j:j].Clear= TrueEnd Sub7,多工作簿多工作表查询汇总去重复值(字典数组)‘&pid=3181286&page=1&extra=page%3D1‘详细记录.xls‘3个工作簿需要都打开Sub xxjl()Dim Sht1 As Worksheet, Sht As WorksheetDim wb1 As Workbook, wb2 As Workbook, wb3 As WorkbookDim i&, Myr2&, Arr2, Myr&, Arr, Myr1&, xm$, yl$= FalseSet wb1 = ActiveWorkbookSet wb2 = Workbooks("购进")Set wb3 = Workbooks("配料")Myr2 = [a65536].End(xlUp).RowArr2 = Range("a2:d" & Myr2)For i = 1 To UBound(Arr2)xm = Arr2(i, 2)For Each Sht In SheetsIf = xm ThenMyr = [a65536].End(xlUp).RowArr = Range("a1:b" & Myr)For j = 1 To UBound(Arr)yl = Arr(j, 1)For Each Sht1 In SheetsIf = yl ThenMyr1 = [a65536].End(xlUp).Row + 1 Cells(Myr1, 1) = Arr2(i, 1)Cells(Myr1, 3) = Arr2(i, 3)Cells(Myr1, 2) = Arr2(i, 4) * Arr(j, 2)Exit ForEnd IfNextNext jGoTo 100End IfNext100:Next iCall qccf= TrueEnd SubSub qccf()Dim Sht As Worksheet, Myr&, Arr, i&, xDim d, k, t, Arr1, j&= FalseFor Each Sht In SheetsMyr = [a65536].End(xlUp).RowArr = Range("a2:c" & Myr)Set d = CreateObject("")If Myr < 3 Then GoTo 100For i = 1 To UBound(Arr)x = Arr(i, 1) & "," & Arr(i, 3)If Not (x) Thend(x) = Arr(i, 2)Elsed(x) = d(x) + Arr(i, 2)End IfNextk =t =ReDim Arr1(1 To UBound(k) + 1, 1 To 3)For j = 0 To UBound(k)Arr1(j + 1, 1) = Split(k(j), ",")(0)Arr1(j + 1, 3) = Split(k(j), ",")(1)Arr1(j + 1, 2) = t(j)Next jRange("a2:c" & Myr).ClearContents[a2].Resize(UBound(Arr1), 3) = Arr1100:Set d = NothingNext= TrueEnd Sub8,多工作簿对比(FileSearch)‘&pid=3285214&page=1&extra=page%3D1Sub dgzbdb()'多工作簿对比'by:蓝桥 2009-11-7Dim myFs As FileSearchDim myPath As String, Filename$Dim i&, n&, nm$, myfileDim Sht1 As Worksheet, sh As WorksheetDim wb1 As Workbook, yf, j&, m1&Dim m, arr, r1= False= FalseOn Error Resume NextSet wb1 = ThisWorkbookSet myFs =myPath =For Each Sht1 In SheetsIf InStr(Sht1.[a1], "费用明细表") > 0 Thennm = Left(Sht1.[a1], Len(Sht1.[a1]) - 5)With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = nm & ".xls".SearchSubFolders = TrueIf .Execute(SortBy:=msoSortByFileName) > 0 Thenmyfile = .FoundFiles(1)myfileDim wb As WorkbookSet wb = ActiveWorkbookSet sh =m = sh.[a65536].End(xlUp).Rowarr = (Cells(2, 1), Cells(m, 6))yf = Val(Split(arr(2, 1), ".")(1))For j = 1 To UBound(arr)Set r1 = ("c:c").Find(arr(j, 3))If r1 Is Nothing Thenm1 = Sht1.[d65536].End(xlUp).Row Cells(m1, 1). shift:=xlUpCells(m1, 1) = Cells(m1 - 1, 1) + 1Cells(m1, 2) = arr(j, 3)Cells(m1, yf + 3) = arr(j, 6)End IfNext jsavechanges:=FalseSet wb = NothingEnd IfEnd WithEnd IfNextSet myFs = Nothing= True= TrueEnd Sub9,多工作簿汇总(FileSearch+字典)‘&pid=3323070&page=1&extra=page%3D1Sub pldrwb1123()'合并.xls'导入指定文件的数据Dim myFs As FileSearchDim myPath As String, Filename$Dim i&, n&, y&, bb, j&, xDim Sht1 As Worksheet, sh As WorksheetDim aa, nm$, nm1$, m, Arr, r1, mm&Dim d, k, t, d1, t1= Falsemm = 8Set Sht1 = ActiveSheetSht1.[a8:h1000].ClearContentsSet myFs =myPath =With myFs.NewSearch.LookIn = myPath.FileType = msoFileTypeNoteItem.Filename = "*.xls".SearchSubFolders = TrueIf .Execute(SortBy:=msoSortByFileName) > 0 Thenn = .ReDim myfile(1 To n) As StringFor i = 1 To nmyfile(i) = .FoundFiles(i)Filename = myfile(i)aa = InStrRev(Filename, "\")nm = Right(Filename, Len(Filename) - aa)nm1 = Left(nm, Len(nm) - 4)If nm1 <> "合并" Thenmyfile(i)Dim wb As WorkbookSet wb = ActiveWorkbookm = [a65536].End(xlUp).RowArr = Range(Cells(8, 1), Cells(m, 7))Set d = CreateObject("")Set d1 = CreateObject("")For j = 1 To UBound(Arr)x = Year(Arr(j, 1)) & "年" & Month(Arr(j, 1)) & "月" & "|" & Arr(j, 2) & "|" & Arr(j, 3) & "|" & Arr(j, 5)d(x) = d(x) + Arr(j, 4)d1(x) = Arr(j, 7)Nextk =t =t1 =For y = 0 To UBound(k)bb = Split(k(y), "|")Cells(mm, 1) = nm1Cells(mm, 2) = bb(0)Cells(mm, 3) = bb(1)Cells(mm, 4) = bb(2)Cells(mm, 5) = t(y)Cells(mm, 6) = bb(3)Cells(mm, 7) = t(y) * bb(3)Cells(mm, 8) = t1(y)mm = mm + 1Nextsavechanges:=FalseSet wb = NothingSet d = NothingSet d1 = NothingEnd IfNextElseMsgBox "该文件夹里没有任何文件"End IfEnd With[a1].SelectSet myFs = Nothing= TrueEnd Sub10,多工作簿多工作表提取数据(Do While)‘&pid=3368549&page=1&extra=page%3D1‘年度汇总.xlsSub ndhz()Dim Arr, myPath$, myName$, wb As Workbook, sh As Worksheet Dim m&, funm$, shnm$, col%, i&= FalseSet wb = ThisWorkbookfunm = "年度汇总.xls"myPath = & "\"myName = Dir(myPath & "*.xls")Do While myName <> "" And myName <> funmWith GetObject(myPath & myName)Arr = .Sheets("领料").Range("A1").CurrentRegionFor Each sh Inshnm =If InStr(shnm, "班") > 0 Thencol = 11Elsecol = 7End IfFor i = 2 To UBound(Arr)If Arr(i, col) = shnm Thenm = sh.[a65536].End(xlUp).Row + 1Cells(m, 1).Resize(1, 12) = (Arr, i, 0)End IfNextNext.Close FalseEnd WithmyName = DirLoop= TrueEnd Sub‘&page=1#pid4261137Sub tqsj()Dim Arr, myPath$, myName$, wb As Workbook, sh As Worksheet Dim m&, funm$, shnm$, col%, i&, Myr&, Sht1 As Worksheet, pm$ = FalseOn Error Resume NextSet Sht1 = ActiveSheet[a2:g1000].ClearContentsfunm = "提取数据.xls": m = 1myPath = & "\"myName = Dir(myPath & "*.xls")Do While myName <> "" And myName <> funmWith GetObject(myPath & myName)Set wb = Workbooks(myName)For Each sh Inshnm =pm = sh.[a4].ValueMyr = sh.[a65536].End(xlUp).RowArr = ("b9:e" & Myr)m = m + 1With Sht1.Cells(m, 1) = myName.Cells(m, 2) = pm.Cells(m, 3) = shnm.Cells(m, 4).Resize(UBound(Arr), 4) = Arr End Withm = m + UBound(Arr) - 1Next.Close FalseEnd WithmyName = DirLoop= TrueEnd Sub‘&pid=3439524&page=1&extra=page%3D1‘我想要的结果.xlsSub zdgx()Dim Arr, myPath$, myName$, sh As WorksheetDim m&, funm$, n&, Sht As Worksheet= Falsefunm = "我想要的结果.xls"Set Sht = ActiveSheetSht.[a2:f1000].ClearContentsSht.[a2:f1000]. = xlNonemyPath = & "\"myName = Dir(myPath & "*.xls")n = 2Do While myName <> "" And myName <> funmWith GetObject(myPath & myName)Set sh = .Sheets("Sheet1")m = sh.[a65536].End(xlUp).RowArr = ("a2:f" & m)Cells(n, 1).Resize(m - 1, 6) = Arrn = n + m - 1.Close FalseEnd WithmyName = DirLoop("a2:f" & n - 1). = 1= TrueEnd Sub‘&id=113181&star=1#1455753‘汇总工作表.xls 2010-2-7Sub ndhz()Dim Arr, myPath$, myName$, wb As Workbook, sh As Worksheet Dim m&, funm$, shnm$, col%, i&, Myr&, Sht1 As Worksheet= FalseOn Error Resume NextSet Sht1 = ActiveSheetfunm = "汇总工作表.xls": m = 1myPath = & "\"myName = Dir(myPath & "*.xls")Do While myName <> "" And myName <> funmWith GetObject(myPath & myName)Set wb = Workbooks(myName)For Each sh Inshnm =Myr = sh.[a65536].End(xlUp).RowArr = ("a1:c" & Myr)For i = 1 To UBound(Arr)If Arr(i, 3) > 50 Thenm = m + 1(m, 1).Resize(1, 3) = (Arr, i, 0)(m, 4) = Arr(i + 1, 3)(m, 5) = Arr(i + 2, 3)(m, 6) = shnmEnd IfNextNext.Close FalseEnd WithmyName = DirLoop= TrueEnd Sub‘&pid=4261137&page=1&extra=page%3D1Sub ndhz()Dim Arr, myPath$, myName$, wb As Workbook, sh As Worksheet Dim m&, funm$, shnm$, col%, i&, Myr&, Sht1 As Worksheet= FalseOn Error Resume NextSet Sht1 = ActiveSheetfunm = "汇总工作表.xls": m = 1myPath = & "\"myName = Dir(myPath & "*.xls")Do While myName <> "" And myName <> funmWith GetObject(myPath & myName)Set wb = Workbooks(myName)For Each sh Inshnm =Myr = sh.[a65536].End(xlUp).RowArr = ("a1:c" & Myr)For i = 1 To UBound(Arr)If Arr(i, 3) > 50 Thenm = m + 1(m, 1).Resize(1, 3) = (Arr, i, 0)(m, 4) = Arr(i + 1, 3)(m, 5) = Arr(i + 2, 3)(m, 6) = shnmEnd IfNextNext.Close FalseEnd WithmyName = DirLoop= TrueEnd Sub‘9493-1-1 ndhz() ‘设置工作表在此处要用Sheets("汇总")格式Dim Arr, myPath$, myName$, wb As Workbook, sh As Worksheet Dim m&, funm$, shnm$, n%, i&, wb1 As Workbook= FalseSet wb = ThisWorkbookfunm = "汇总.xls": n = 1myPath = & "\"myName = Dir(myPath & "*.xls")("汇总").[a2:e100].ClearDo While myName <> "" And myName <> funmWith GetObject(myPath & myName)Set wb1 = Workbooks(myName)Set sh = ("Sheet1")m = sh.[a65536].End(xlUp).RowWith ("汇总")n = n + 1.Cells(n, 1) = sh.[b2].Value.Cells(n, 2) = sh.[c2].Value.Cells(n, 3) = (sh.[e2].Resize(m - 1, 1)).Cells(n, 4) = (sh.[f2].Resize(m - 1, 1)).Cells(n, 5) = (sh.[g2].Resize(m - 1, 1))End With.Close FalseEnd WithmyName = DirLoop("汇总").Range("a2:e" & n). = 1= TrueEnd Sub'0459-1-1‘ 2010-5-28Sub dgzbsj()Dim Arr, i&, sh$, n&, myPath$, shnm$, nm$, ad$Dim Sht As Worksheet, m&, Arr1, r1On Error Resume Next= FalsemyPath = & "\"sh = Dir(myPath & "*.xls")While Not Len(sh) = 0If sh <> ThenWith GetObject(myPath & sh)Set Sht = .Sheets("Sheet1") ‘要用set以后才能取到数据m = Sht.[b65536].End(xlUp).RowArr = ("b3:e" & m)Arr1 = ("b4:e" & m)shnm = Left(sh, Len(sh) - 4)For i = 1 To UBound(Arr, 2)nm = Arr(1, i)Sheets(nm).ActivateSet r1 = (shnm, , , 1)If Not r1 Is Nothing ThenRange.Offset(1, 0).Resize(UBound(Arr1), 1) = (Arr1, 0, i)End IfNextEnd WithEnd Ifsh = DirWend= TrueEnd Sub‘2011-7-5‘&pid=5011219&page=1&extra=page%3D1Sub ndhz()Dim Arr, myPath$, myName$, wb As Workbook, sh As WorksheetDim funm$, nm$, n%, wb1 As Workbook, r1, col%, Myr&= FalseSet wb = ThisWorkbookfunm = "总表.xls": n = 1myPath = & "\"myName = Dir(myPath & "*.xls")("Sheet1").[a2] = "产品名"Do While myName <> ""If myName <> funm ThenWith GetObject(myPath & myName)nm = Left(myName, Len(myName) - 4)Set wb1 = Workbooks(myName)Set sh = ("Sheet1")Arr = sh.[a1].CurrentRegionWith ("Sheet1")Set r1 = .Rows(2).Find(nm, , , 1)If Not r1 Is Nothing Thencol =Elsecol = [iv2].End(xlToLeft).Column + 1Cells(2, col) = nmEnd IfFor i = 2 To UBound(Arr)Set r1 = .[a:a].Find(Arr(i, 1), , , 1) If Not r1 Is Nothing Then.Cells, col) = Arr(i, 2)ElseMyr = .[a65536].End(xlUp).Row + 1 .Cells(Myr, 1) = Arr(i, 1).Cells(Myr, col) = Arr(i, 2)End IfNextEnd With.Close FalseEnd WithEnd IfmyName = DirLoop= TrueEnd Sub11,多工作簿提取指定数据(GetOpenFileName)‘汇总表.xls‘&pid=3369047&page=1&extra=page%3D1Private Sub CommandButton1_Click()Dim tmpFileName As String, FileNumber As Integer, c As RangeDim myWorkbook As Workbook, tmpFileList As Variant, tmpFileIndex As Long Dim f As Range ‘上述红字必须声明为Variant,否则下面的Ubound要出错tmpFileList = ("Data File(*.xls),*.xls", , "确定文件", , True)If VarType(tmpFileList) = vbBoolean ThenExit SubElse= False= "数据处理中,请稍等..."= FalseSet f = [a65536].End(xlUp)For tmpFileIndex = 1 To UBound(tmpFileList)= tmpFileIndex & "/" & UBound(tmpFileList) & "处理中"tmpFileName = tmpFileList(tmpFileIndex)Set myWorkbook = (tmpFileName, 0, vbReadOnly)With myWorkbookSet c = .Worksheets(1).Range("b:B").Find("销售额") '找到B列中带销售额字样的单元格Set f = (1, 0)= Left(.Name, Len(.Name) - 4) '填入文件名(0, 1).Value = (0, 1).Value '填入销售额的数字.Close FalseEnd WithNext tmpFileIndexEnd If= False= TrueEnd Sub12,多工作表汇总(字典)‘‘8738-1-1模块1:Public m%, k1Private Sub Workbook_Open()Dim d, k, t, Myr&, Arr, i&Set d = CreateObject("")With Sheet3Myr = .[a65536].End(xlUp).RowArr = .Range("a2:e" & Myr)For i = 1 To UBound(Arr)d(Arr(i, 1)) = ""Nextk =With Sheet1.[b1].Validation.Delete.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _Operator:=xlBetween, Formula1:=Join, ",")End WithSet d = CreateObject("")For i = 1 To UBound(Arr)d(Arr(i, 4)) = ""。
xlwings 公式
xlwings 公式XLWings公式是一种适用于Microsoft Excel的Python库,它允许用户通过Python代码来操作Excel表格。
该库提供了各种功能,包括在Excel中生成和修改工作簿,创建和修改图表以及生成自定义函数等。
在本文中,我们将探讨如何使用XLWings公式的各种功能来提高在Excel上的工作效率。
生成和修改工作簿使用XLWings公式库,您可以轻松地生成和修改工作簿,这对于那些需要经常创建或修改大量表格的人来说非常有用。
下面是一些您可以使用的有用功能:1.创建新工作簿您可以使用以下Python代码来创建新的工作簿:``` import xlwings as xw app =xw.App(visible=False) # 启动后台Excel程序 wb = app.books.add() # 创建新的工作簿wb.save('my_workbook.xlsx') # 在当前目录下保存工作簿 wb.close() # 关闭工作簿 app.quit() # 退出Excel 程序 ```在这个例子中,我们使用xlwings库中的app对象来启动Excel程序,然后使用app.books.add()函数创建一个新的工作簿。
最后,我们使用wb.save()函数将工作簿保存在当前目录下,关闭工作簿并退出Excel程序。
该代码段是一个简短的方式来生成新的工作簿。
2.打开现有工作簿除了创建新的工作簿之外,您还可以使用以下Python 代码打开现有的工作簿:``` import xlwings as xw app =xw.App(visible=False) # 启动后台Excel程序 wb = xw.Book('my_workbook.xlsx') # 打开现有工作簿sheet1 = wb.sheets['Sheet1'] # 获取工作簿的第一个工作表 sheet1.range('A1').value = 'Hello World' # 在A1单元格写入值 wb.save() # 保存工作簿wb.close() # 关闭工作簿 app.quit() # 退出Excel程序 ```在这个例子中,我们使用xlwings库中的Book对象来打开现有的工作簿,然后使用sheet1.range('A1').value = 'Hello World'函数在工作表的A1单元格中写入值。
ExcelVBARange对象基本操作应用示例(转贴,实用参考)
ExcelVBARange对象基本操作应用示例(转贴,实用参考)比较全面,有的东西我还没有用过,收集了,大家一起学习下.[示例01] 赋值给某单元格[示例01-01]Sub test1()Worksheets("Sheet1").Range("A5").Value = 22MsgBox "工作表Sheet1内单元格A5中的值为" _& Worksheets("Sheet1").Range("A5").ValueEnd Sub[示例01-02]Sub test2()Worksheets("Sheet1").Range("A1").Value = _Worksheets("Sheet1").Range("A5").ValueMsgBox "现在A1单元格中的值也为" & _Worksheets("Sheet1").Range("A5").ValueEnd Sub[示例01-03]Sub test3()MsgBox "用公式填充单元格,本例为随机数公式"Range("A1:H8").Formula = "=Rand()"End Sub[示例01-04]Sub test4()Worksheets(1).Cells(1, 1).Value = 24MsgBox "现在单元格A1的值为24"End Sub[示例01-05]Sub test5()MsgBox "给单元格设置公式,求B2至B5单元格区域之和"ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"[示例01-06]Sub test6()MsgBox "设置单元格C5中的公式."Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[示例02] 引用单元格Sub Random()Dim myRange As Range'设置对单元格区域的引用Set myRange = Worksheets("Sheet1").Range("A1:D5")'对Range对象进行操作myRange.Formula = "=RAND()"myRange.Font.Bold = TrueEnd Sub示例说明:可以设置Range对象变量来引用单元格区域,然后对该变量所代表的单元格区域进行操作。
【转载】EXCELVBA关于范围选择代码集
【转载】EXCELVBA关于范围选择代码集Range(“A1:B2”).Select ‘选中“A1”、“A2”、“B1”、“B2”四个连续的单元格Range(“12:12”).Select ‘选中第12⾏Range(“B:B”).Select ‘选中B列Range(“A1:A2,B7,2:2”).Select ‘选中“A1”、“A2”、“B7”五个不连续的单元格和第⼆⾏Rows(“2:2”). Select ‘选中第2⾏Rows(“2:5”). Select ‘选中2到5⾏Columns("A:A").Select ‘选中A列Columns("E:B").Select ‘选中E到B列Columns("E:H").Columns("B:B") '利⽤列号引⽤第E-H列⾥的第2列Rows.Select '选中所有⾏Columns.Select '选中所有列Cells.Select '选中所有单元Union(Range(Cells(1, 1), Range(Cells(3, 1))) '范围联合cells(1,1) ‘单元格A1EntireRow.Insert '整⾏插⼊Range.CurrentRegion '返回活动单元格所在的周围由空⾏和空列组成的单元格区域(即通常所说的当前区域),该区域为活动单元格附近不为空的单元格范围,该范围截⽌区域为空⾏、空列。
[A1].CurrentRegion ‘A1单元格所在当前区域edRange '当前⼯作表已经使⽤的单元格组成的矩形区域,已使⽤区域ActiveCell.CurrentRegion.Select '当前区域选择Set tbl = ActiveCell.CurrentRegion '设定当前区域'************************************************************************************************'Range("A1").CurrentRegion.ListHeaderRows '返回指定(或活动)单元格所在区域中标题⾏的⾏数Range("A1").CurrentRegion.Columns.Count '返回指定(或活动)单元格所在区域的列数Range("A1").CurrentRegion.Cells.Count '返回指定(或活动)单元格所在区域的单元格数Range("A1").CurrentRegion.Rows.Count '返回指定(或活动)单元格所在区域的⾏数Columns("G:G").EntireColumn.AutoFit 'G列⾃动筛选rng.Resize(rng.Rows.Count - rng.ListHeaderRows, rng.Columns.Count).Offset(1, 0).Select'选取当前区域中除标题⾏以外的区域'Sheets("sheet1").Range("A1").CurrentRegion.Copy Sheets("sheet2").Range("A1")'复制当前区域的数据到另⼀位置'***************************************************'格式化当前区域中的数据'With ActiveCell.CurrentRegion.Font.Bold = True.Font.ColorIndex = 3End With*****************************************************Range("A1").CurrentRegion.AutoFormat ‘A1所在区域⾃动套⽤默认的格式***********************************************************************'将按照第3列的数据从⼤到⼩进⾏排列,有标题⾏'Set rng = Worksheets("sheet1").Cells(1, 1).CurrentRegionrng.Sort Key1:=rng.Cells(1, 3), Order1:=xlDescending, Header:=xlYes*********************************************************************************'A1单元格所在的当前区域数值化处理'Range("A1").CurrentRegion.Value =Range("A1").CurrentRegion.Value********************************************************************************edRange.Rows.Count '激活表的⾏数edRange.Columns.Count '激活表的列数edRange.EntireRow '获取激活表当前⾏edRange.EntireColumn '获取激活表当前列**************************************************************************************************Range("B5").Delete Shift:=xlUp '删除单元格Range("A1").Select选择单元格Range("A1").Cells 选择其中的单元格Range("A1").Rows 选择其中的⾏Range("A1").Cells 选择其中的列Range("A1").Offset 偏移所选区域Range("A1").Offset(2,3).Value = 5Range("A1").Resize扩⼤或缩⼩所选区域Range("B2").Resize(5,4).SelectRange("A1").End当前区域结尾处的单元格Range("C5").End(xlUp).SelectRange("A1").Activate激活单元格Range("A1").Clear清除所有Range("A1").ClearComents 清除批注Range("A1").ClearContents 清除内容Range("A1").ClearFormats 清除格式Range("A1").Copy复制单元格Range("A1").PasteSpecial 黏贴单元格Range("A1").Cut 剪切单元格Range("A1").Value单元格的值Range("A1:A10").Value = 200Range("A1").CurrentRegion 当前区域,以空⾏空列为边界Range("B5").CurrentRegion.SelectRange("A1").Count单元格数量Range("B4:F10").CountRange("A1").Rows.Count⾏数量 edRange.Rows.CountRange("A1").Columns.Count列数量 edRange.Columns.CountRange("A1").Address 地址Range("A1").EntireRow 获取当前⾏Range("A1").EntireColumn 获取当前列Range("A10").EntireColumnRange("C5").End(xlUp).Select '等效于ctrl+上⽅向键Range("C5").End(xlDown).Select '等效于ctrl+下⽅向键Range("C5").End(xlToLeft).Select '等效于ctrl+左⽅向键Range("C5").End(xlToRight).Select '等效于ctrl+右⽅向键Range("A1").Offset(2,3).Value = 500 '下移动2⾏,右移动3列Range("C5:D6").Offset(-3,0).Select '上移动3⾏Range("B2").Resize(5,4).Select '以B2位原点,5⾏4列Application.Union(Range("A1:A10"),Range("D1:D5")).Select 'Application对象Union⽅法,整合⼏个区域'***************************************************************'ActiveSheet.Rows("3:3").Select '按⾏引⽤RowsActiveSheet.Rows("3:5").SelectActiveSheet.Rows(3).SelectActiveSheet.Rows.SelectRows("3:10").Rows("1:1").SelectActiveCell.EntireRow.Select '激活单元格所在⾏的整⾏选择ActiveCell.EntireRow.Offset(1, 0).Cells(1).Value = 2 ‘将值2输⼊到激活单元格的⾏下⾯的第⼀个单元格中。
NTKO_OFFICE的Excel学习文档
NTKO_OFFICE的Excel插件学习文档一、概述1.NTKO OFFICE 的使用NTKO OFFICE作为第三方的文档控件,使用前需加载文档包“OfficeControl.cab”,并在< object> 的<param> 部分增加密钥。
加载文档包部分如下:<object id="NTKO_OCX"classid="clsid:C9BC4DFF-4248-4a3c-8A49-63A7D317F404"codebase="officescab/OfficeControl.cab#version=4,0,1,1">密钥部分如下:<param name="ProductCaption" value="DFG-BOM"/><param name="ProductKey"value="D38EDB50BA005187BDA058E6530DE3C4E142FDF9"/> <param name="MakerCaption" value="武汉东浦信息技术有限公司"/><param name="MakerKey"value="E41A6C217D5900BC740C94BA748B56CF211018F9"/>2.Object对象属性DocType 的含义在“if(TANGER_OCX_OBJ.DocType==2)”中TANGER_OCX_OBJ为控件对象。
Doctype返回当前控件中的文档类型,只读.0: 没有文档;100 =其他文档类型;1=word;2=Excel.Sheet或者Excel.Chart ;3=PowerPoint.Show;4= Visio.Drawing;5=MSProject.Project;6= WPS Doc;7:Kingsoft Sheet3.在excel中插入超链接向指定的区域或图形添加超链接。
如何把多张工作表内容快速复制到一张表
如何把多张工作表内容快速复制到一张表我有一份教师工资表,一个工作簿里有好多张工作表的,现在我想把各工作表里的内容全部合到一张表中,除了用复制粘贴的方法外,请问还能有什么好的方法快速合到一起吗?(首选)S ub yy()’声明过程名称为“yy"。
当要声明一个过程时,通常是以关键字“SUB”开头,并且以关键字“END”结束,在SUB关键字之前是用来指定此过程的作用域,例如public,static, 或protected 等。
在SUB关键字之后为过程最重要的三大部分:过程名称、参数以及在SUB和END SUB之间的主体程序代码内容。
过程是可以执行的语句序列单元,所有可执行的代码必须包含在某个过程中,任何过程都不能嵌套在其它过程中,过程的名称必须在模块级别进行定义.Sheets。
Add after:=Sheets(Sheets.Count)’新建一个工作表放在最后。
参数值和参数名之间应该使用“:=”符号,而不是等号。
在代码中,属性和方法都是通过连接符“。
”来和对象连接的。
Add是方法名,after是自变量,方法名与自变量之间用半角空格隔开。
For i = 1 To Sheets。
Count — 1’从第一个工作表到倒数第二个工作表With Sheets(i)’with语句可以在一个单一对象或一个用户定义类型上执行一系列的语句。
使用with语句不仅可以简化程序代码,而且可以提高代码的运行效率。
With/end with语句结构中以“。
”开头的语句相当于引用了with语句中指定的对象.当程序一旦进入with/end with结构,with 语句指定的对象就不能改变.因此不能用with语句来设置多个不同的对象.n = .[c65536]。
End(xlUp)。
Row'求出c列最大行号.求出某列最大行号的目的是确定有数据区域的最下边界,为此,选择求最大行号列时,选择的列数据最下边界要最大限度包含所有的数据。
Excel自编宏大全(Word版)
目录之阳早格格创做(相共止简略、循环比较)(定义动向天区称呼、没有沉复值公式宏、没有沉复值个数战止数公式宏、加边框宏)1,从数据源匹配与数的问题Sub 宏131()'' 2007-1-31' Shizx98'Dim a As Range, Myrng1 As Range, Myrng2 As RangeDim Myrow As IntegerDim Myrow1 As IntegerDim Myrow2 As IntegerDim Myrow3 As IntegerDim x As IntegerWorksheets("Sheet1").ActivateRange("d2").SelectMyrow2 = Selection.Rows.Count 'D列数据的止数Range("a1").Select'AB列数据的止数Set Myrng1 = Range(Cells(2, 1), Cells(Myrow3, 1))Set Myrng2 = Range(Cells(2, 2), Cells(Myrow3, 2))For x = 2 To Myrow2 + 1Set a = Range("D" & x)For y = 1 To Myrow3If Len(a) > 7 ThenMyrow = Application.WorksheetFunction.Match(a, Myrng1, 0)ElseMyrow = Application.WorksheetFunction.Match(a, Myrng2, 0)End IfIf Myrow = 0 ThenGoTo 100ElseRange("F1").SelectRange(Cells(Myrow + 1, 1), Cells(Myrow + 1, 2)).SelectSelection.Cut Destination:=Range(Cells(Myrow1 + 1, 6),Cells(Myrow1 + 1, 7))Selection.Delete Shift:=xlUpMyrow = 0MsgBox "已找到!"GoTo 200End If100: Next y200: Next xEnd Sub2,部分字符天点查找‘2007/1/30‘Sub bfzfcz()Dim Myrow1 As IntegerDim Myrow2 As IntegerDim x%, y1%, y2%, gg%Dim AA, BBOn Error Resume NextRange("a2").SelectRange("e1").Selectgg = 2For x = 2 To Myrow2AA = Range("e" & x)For y1 = 2 To Myrow1 + 1BB = Application.WorksheetFunction.SearchB(AA, Cells(y1, 1)) If BB > 0 ThenRange("g" & gg) = "A" & y1gg = gg + 1ElseEnd IfBB = 0Next y1For y2 = 2 To Myrow1 + 1BB = Application.WorksheetFunction.SearchB(AA, Cells(y2, 2))If BB > 0 ThenRange("g" & gg) = "B" & y2gg = gg + 1ElseEnd IfBB = 0Next y2'gg = gg + 1Next xEnd Sub3,多表查询汇总战沉复值问题(相共止简略、循环比较)Sub 宏0204()''睹汇总0204.xls' 2007-2-4'蓝桥玄霜'大汇总问题'Dim x As Integer, y As IntegerDim rng1 As Range, tbl As RangeDim n As IntegerDim Myrow1 As Integer, Myrow2 As IntegerDim rng2Application.ScreenUpdating = FalseSheets("汇总").Select '扫除总表本有的数据Range("a1").SelectIf tbl.Rows.Count > 1 Thentbl.Offset(1, 0).Resize(tbl.Rows.Count - 1,tbl.Columns.Count).ClearContentsElseEnd Ifn = 2Sheets("使用型号表").SelectRange("a1").SelectMyrow1=[a65536].End(xlUp).Row 'A列最底下一止的止数,中间有空格止For x = 2 To Myrow1Sheets("使用型号表").SelectSet rng1 = Range("B" & x) '依次把“使用数量”的值赋给rng1变量rng2 = Range("A" & x).Text '把序号里的表格名赋给rng2变量If rng1.Value <> "" ThenSheets("汇总Sheets(rng2).Select '用表格名采用表格Range("a1").SelectMyrow2 = Selection.CurrentRegion.Rows.Count '数据的止数Range(Cells(2, 2), Cells(Myrow2, 5)).Copy '复造那些数据Sheets("汇总").ActivateCells(n, 2).PasteSpecial '粘揭到汇总表Range(Cells(n, 6), Cells(Myrow2 + n - 2, 6)).Select '采用F列相共止数Selection.FormulaR1C1 = "=RC[-1]*r1c6" '将使用数量X 数量Range(Cells(n, 6), Cells(Myrow2 + n - 2, 6)).Copy '复造那些数据 Cells(n, 5).SelectSelection.PasteSpecialPaste:=xlValues'以“采用性粘揭”的“数值”粘揭Range(Cells(n, 6), Cells(Myrow2 + n - 2, 6)).ClearContents '扫除F列数量Cells(1, 6).ClearContentsn = n + Myrow2 - 1 '为下次粘揭数据的止位子ElseEnd IfNext xbcfhz0204 '没有沉复汇总的宏Application.ScreenUpdating = TrueEnd SubSub bcfhz0204()'没有沉复汇总'蓝桥玄霜'2007-2-4Dim b As Integer, x As Integer, y As Integer, aa As Integer, yyy As IntegerDim minc As RangeDim rng1 As Range, a As RangeDim n1 As Integer, nn As Integer, Myrow1 As IntegerDim pp, pp1On Error Resume NextSheets("汇总").SelectRange("a1").SelectMyrow1 = Selection.CurrentRegion.Rows.Count 'A列数据的止数Set minc = Range("b2:b" & Myrow1)Set rng1 = Range("m2:m" & Myrow1)Range("m2").Select'供沉复值个数的辅帮列公式Selection.Formula ="=if((countif(minc,$b2)>1)*(match($b2,minc,0)=row($a1)),count(m$1:m1)+ 1,"""")"Selection.AutoFill Destination:=rng1, Type:=xlFillDefault '公式往下复造b = Application.WorksheetFunction.Max(rng1)Range("n2").Select '供沉复值的辅帮列公式Selection.Formula ="=if(iserror(index(minc,match(row(b1),m$2:m$65536,0))),"""",index(minc,match(row(b1),m$2:m$65536,0)))"Selection.AutoFill Destination:=Range("n2:n" & b + 1), Type:=xlFillDefault '公式往下复造Range("n2:n" & b + 1).Select'以“采用性粘揭”的“数值”粘揭n,m列,果为简略一止后,公式会沉新估计 'Range("n2").SelectSelection.PasteSpecial Paste:=xlValuesRange("m2").SelectSelection.PasteSpecial Paste:=xlValuesFor x = 2 To b + 1Set a = Range("n" & x)aa = Application.WorksheetFunction.CountIf(minc, a) '估计沉复值的个数Range("o" & x).Value = aann = aaRange("p1") = aRange("p2").Select '沉复值天方止数的数组公式Selection.FormulaArray ="=if($p$1<>"""",if(iserror(small(if(minc=$p$1,row(minc),""""),row(1:1)))," """,small(if(minc=$p$1,row(minc),""""),row(1:1))))"Selection.AutoFill Destination:=Range("p2:p" & aa + 1), Type:=xlFillDefaultRange("p2:p" & aa + 1).SelectRange("p2").SelectSelection.PasteSpecial Paste:=xlValues'以“采用性粘揭”的“数值”粘揭来除公式做用For y = 2 To nn '正在沉复值里循环比较pp = Range("p" & y).Value '将止数赋给变量ppFor yy = y + 1 To nn + 1pp1 = Range("p" & yy).Value '将止数赋给变量pp1If pp1 = "" ThenGoTo 100ElseEnd IfIf Cells(pp, 2) = Cells(pp1, 2) And Cells(pp, 3) = Cells(pp1, 3) And Cells(pp, 4) = Cells(pp1, 4) ThenCells(pp, 5) = Cells(pp, 5) + Cells(pp1, 5) '汇总部分Range(Cells(pp1, 1), Cells(pp1, 5)).Delete shift:=xlUp'简略多余的止For yyy = yy + 1 To nn + 1Range("p" & yyy) = Range("p" & yyy) - 1Next yyyRange("p" & yy).Delete shift:=xlUpyy = yy - 1: nn = nn - 1ElseEnd IfNext yy100: Next ynn = aaRange("p1:P" & aa + 1).ClearContents '扫除辅帮列数据200: Next xRange("m1").SelectSelection.CurrentRegion.ClearContents '扫除辅帮列数据Range("A1").Select '以下正在A列加上序号Range("A2").SelectActiveCell.FormulaR1C1 = "1"Range("A3").SelectActiveCell.FormulaR1C1 = "2"Range("A2:A3").SelectSelection.AutoFill Destination:=Range("A2:A" & n1), Type:=xlFillDefaultRange("A2").SelectEnd Sub4,处事表的称呼战index号Sub Sheetsname()‘睹上例的xls‘2007-2-2Dim Sht As WorksheetSheets("使用型号表").Activaten = 2If <> "汇总" And <> "使用型号表" Thenn = n + 1ElseEnd IfNext ShtEnd Sub5,沉复值加色Sub 沉复值加色()'' 蓝桥玄霜2007-2-2'表格中有沉复值公式'Dim rng1 As Range, data As RangeDim b As IntegerSet rng1 = Range("n2:n117")‘沉复值天区b = Application.WorksheetFunction.Max(rng1)‘沉复值个数Range("B2:B117").SelectFor X = 2 To b + 1‘用查找Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _Formula1:="=$M$" & XSelection.FormatConditions(X - 1).Interior.ColorIndex = 3Next XEnd Sub6,统计Sub tongji()‘‘Excel论坛Dim Myrow1 As Integer, Myrow2 As IntegerDim Sht As Worksheet, Sht1 As WorksheetApplication.ScreenUpdating = FalseOn Error Resume NextFor Each Sht In ActiveWorkbook.Worksheets 'AB列空格弥补If <> "月计" ThenSheets().SelectRange("a1").SelectMyrow1 = [a65536].End(xlUp).Row 'A列最底下一止的止数,中间有空格也止Set rng1 = Range(Cells(4, 1), Cells(Myrow1 - 1, 2))If IsError(Selection.SpecialCells(xlCellTypeBlanks)) ThenGoTo 100ElseSelection.SpecialCells(xlCellTypeBlanks).SelectRange("A5").ActivateSelection.FormulaR1C1 = "=R[-1]C"Range("A4").SelectSelection.PasteSpecial Paste:=xlValuesApplication.CutCopyMode = FalseRange("A4").SelectEnd IfElseEnd If100: Next ShtSheets("月计").SelectSet Sht1 = Sheets("月计")Range("a1").SelectMyrow1 = [a65536].End(xlUp).RowMyrow1 = Myrow1 - 1Range(Cells(4, 4), Cells(Myrow1, 11)).ClearContentsFor x = 4 To Myrow1fa = Range("a" & x).Valuedao = Range("b" & x).ValueIf fa = "" And dao = "" ThenGoTo 200ElseEnd IfFor n = 1 To 10Sheets(n).ActivateRange("a1").SelectMyrow2 = [a65536].End(xlUp).RowMyrow2 = Myrow2 - 1For y = 4 To Myrow2fa1 = Range("a" & y).Valuedao1 = Range("b" & y).ValueIf fa = fa1 And dao = dao1 ThenSht1.Range("d" & x) = Sht1.Range("d" & x) + Range("d" & y) '汇总Sht1.Range("e" & x) = Sht1.Range("e" & x) + Range("e" & y)Sht1.Range("f" & x) = Sht1.Range("f" & x) + Range("f" & y)Sht1.Range("g" & x) = Sht1.Range("g" & x) + Range("g" & y)Sht1.Range("h" & x) = Sht1.Range("h" & x) + Range("h" & y)Sht1.Range("i" & x) = Sht1.Range("i" & x) + Range("i" & y)Sht1.Range("j" & x) = Sht1.Range("j" & x) + Range("j" & y)Sht1.Range("k" & x) = Sht1.Range("k" & x) + Range("k" & y)ElseEnd IfNext yNext nSheets("月计").Select200: Next xSheets("月计").SelectApplication.ScreenUpdating = TrueEnd Sub7,最大或者最小‘Excel论坛‘Sub MaxMin()Dim rng1 As RangeDim x As Integer, b As IntegerDim a(12)Range("a14").Value = ""For x = 1 To 12Cells(2, x + 3).SelectSet rng1 = Cells(2, x + 3)b = Application.WorksheetFunction.Find("/", rng1)a(x) = Left(rng1, b)a(x) = Val(a(x))Next xMymax = Application.WorksheetFunction.Max(a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9), a(10), a(11), a(12))Mymin = Application.WorksheetFunction.Min(a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9), a(10), a(11), a(12))If a(1) = Mymax ThenRange("a14").FormulaR1C1 = "最大"ElseIf a(1) = Mymin ThenRange("a14").FormulaR1C1 = "最小"ElseEnd IfEnd IfEnd Sub8,末尾一记录(定义称呼)Sub zhytjl0206()'Shizx98'2007-2-6‘hDim b As Integer, x As Integer, y As Integer, aa As IntegerDim minc As RangeDim rng1 As Range, a As RangeDim nn As Integer, Myrow1 As IntegerDim pp, pp1Dim Sht1 As Worksheet, Sht2 As WorksheetOn Error Resume NextApplication.ScreenUpdating = FalseSet Sht1 = Sheets(1): Set Sht2 = Sheets(3)s.Add Name:="data1", RefersToR1C1:= _"=OFFSET(Sheet1!R1C1,1,,COUNTA(Sheet1!R2C1:R65535C1),)"Range("n1").SelectSelection.CurrentRegion.ClearContents '扫除辅帮列数据Range("a1").SelectSelection.CurrentRegion.ClearContents '扫除上次数据Sht1.Range("a1:g1").Copy Sheet2.[a1]Range("a1").SelectMyrow1 = Selection.CurrentRegion.Rows.Count 'A列数据的止数Set minc = Range("a2:a" & Myrow1)Set rng1 = Range("n2:n" & Myrow1)BcfzGS '转供没有沉复值宏For x = 2 To b + 1FuzulieGS '转辅帮列公式宏Range("p2:p" & aa + 1).SelectSelection.Copy Sht2.Range("a2")Application.CutCopyMode = Falsepp = Sht1.Range("p" & 2).Value '将止数赋给变量ppRange(Cells(pp, 7), Cells(pp + aa - 1, 7)).SelectSelection.Copy Sht2.Range("b2") '时间复造到表2Cells(2, 3).SelectSelection.Formula = "=datevalue(rc[-1])+timevalue(rc[-1])" '时间值公式If aa > 1 ThenSelection.AutoFill Destination:=Range("c2:c" & aa + 1), Type:=xlFillDefault '公式往下复造Range("a2:c" & aa + 1).SelectSelection.Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlNo, _OrderCustom:=2, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYinElseEnd Ifpp1 = Range("a2").ValueSheets(2).SelectFor xx = 1 To 7Cells(x, xx) = Sht1.Cells(pp1, xx)Next xxnn = aaRange("p1:P" & aa + 1).ClearContents '扫除辅帮列数据Range(Cells(1, 1), Cells(aa + 1, 3)).ClearContents200: Next xRange("m1").SelectSelection.CurrentRegion.ClearContents '扫除辅帮列数据Sheets(2).ActivateRange("a1:g" & b + 1).Select‘排序Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _OrderCustom:=2, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYin加边框'转加边框宏Range("A1").SelectApplication.ScreenUpdating = TrueEnd SubSub BcfzGS()'没有沉复值公式Range("n2").Select '辅帮列公式供有几个没有沉复值Selection.FormulaArray = "=index(a:a,min(if(countif(n$1:n1,data1),65536,row(data1))))&"""""Selection.AutoFill Destination:=rng1, Type:=xlFillDefault '公式往下复造b = Application.WorksheetFunction.CountIf(rng1, "4*")End SubSub FuzulieGS()'某个没有沉复值的个数战天方止数的数组公式Set a = Range("n" & x)aa = Application.WorksheetFunction.CountIf(minc, a) '估计某个没有沉复值的个数Range("o" & x).Value = aann = aaRange("p1") = Val(a)Range("p2").Select '某个没有沉复值天方止数的数组公式Selection.FormulaArray = "=if($p$1<>"""",if(iserror(small(if(minc=$p$1,row(minc),""""),row(1:1)))," """,small(if(minc=$p$1,row(minc),""""),row(1:1))))"If aa > 1 ThenSelection.AutoFill Destination:=Range("p2:p" & aa + 1), Type:=xlFillDefaultElseEnd IfEnd SubSub 加边框()BorderVars(1) = xlEdgeLeftBorderVars(2) = xlEdgeTopBorderVars(3) = xlEdgeBottomBorderVars(4) = xlEdgeRightBorderVars(5) = xlInsideVerticalBorderVars(6) = xlInsideHorizontalRange("a1:g" & b + 1).SelectSelection.Borders(xlDiagonalDown).LineStyle = xlNoneSelection.Borders(xlDiagonalUp).LineStyle = xlNoneFor x = 1 To 6With Selection.Borders(BorderVars(x)).LineStyle = xlContinuous.Weight = xlThin.ColorIndex = xlAutomaticEnd WithNextEnd SubSub zhytjl0215()'末尾一条记录'蓝桥玄霜,'2007-2-15'根据czzqbµ的数组公式建改'正在表1的H列加了时间变换公式Dim b As Integer, x As Integer, y As IntegerDim minc As RangeDim rng1 As Range, a As Range。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.使用With语句。
Workbooks(1).Sheets(1).Range(″A1:A1000″)=″Pay″
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.FontStyle=″Bold″...
则以下语句比上面的快
With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font
.Name = ″Pay″
.FontStyle = ″Bold″
...
End With
2.使用对象变量。
如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少对对象的访问。
如:
12
Visual BASIC程序设计网络教学橄榄树
整理
Workbooks(1).Sheets(1).Range(″A1″).Value = 100
Workbooks(1).Sheets(1).Range(″A2″).Value = 200
则以下代码比上面的要快:
Set MySheet = Workbooks(1).Sheets(1)
MySheet.Range(″A2″).Value = 200
3.在循环中要尽量减少对象的访问。
For k = 1 To 1000
Sheets(″Sheet1″).Select
Cells(k,1).Value = Cells(1,1).Value
Next k
则以下代码比上面的要快:
Set TheValue = Cells(1,1).Value
Sheets(″Sheet1″).Select
For k = 1 To 1000
Cells(k,1).Value = TheValue
Next k
方法3:减少对象的激活和选择
如果你的通过录制宏来学习VBA的,则你的VBA程序里一定充满了对象的激活和选择,例
如Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select等,但事实上大多数情况下这些操作不是必需的。
例如
Sheets(″Sheet3″).Select
Range(″A1″).Value = 100
Range(″A2″).Value = 200
可改为:。