教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

菜鸟也懂VBA-excle2007VBA入门教程(17)

来源:网络收集 时间:2026-04-01
导读: Excel 2007 VBA 教程 arr1(x, 5) = Join(arr2, \因为数组arr(x,5)是空的,所以又把用Join处理过的arr2数组里的数据又写进arr1(x,5)里 Erase arr2 '清除数据arr2,目的是为了装后面的数据 Next x ' [E1].Resize(Maxro

Excel 2007 VBA 教程

arr1(x, 5) = Join(arr2, \因为数组arr(x,5)是空的,所以又把用Join处理过的arr2数组里的数据又写进arr1(x,5)里

Erase arr2 '清除数据arr2,目的是为了装后面的数据 Next x '

[E1].Resize(Maxrow, 1) = Application.WorksheetFunction.Index(arr1, 0, 5) '利用Index函数又把数据读出来放在单元格E列

'这里有个要注意,那天我问了“守柔”版主,他也是在实践中发现了这个问题,引用的工作表里的数据用Index处理在VBA里不能超过

' 65536行,这个我现在也是卡着的,如果有知道的,可以指导一下,谢谢。 Columns(5).AutoFit 'E列自动适合列宽

MsgBox \用时\秒\显示程序运行用时 End Sub

6. 把A列的内容逗号进行分列

Sub test1() '可能有的学生会说,老鼠老师真傻,这个不是可能用分列实现吗,呵呵,我这里主要是为了讲Split

Dim Myrow As Long, i As Long, arr1, arr2, t As Single '定义相关的变量 t = Timer '开始记时

maxrow = Cells(Rows.Count, 1).End(xlUp).Row '取得A列最后一个有数据的单元格的行号 arr1 = Range(\把区域赋给数组arr1 For i = 1 To maxrow '遍历数组arr1的一维

arr2 = Split(arr1(i, 1), \,\按逗号分开,全部赋值给数组arr2

Cells(i, 2).Resize(1, UBound(arr2) + 1) = (arr2) '把数组arr2一次性赋值给相应的单元格

Erase arr2 '清除数组 arr2 Next i

Columns(\自动适合列宽

MsgBox \用时\秒\显示程序运行的时 End Sub

Sub test2() '

Range(\

Columns(\End Sub

Sub test3() '优化代码

Dim Myrow As Long, i As Long, arr1, arr2, arr3(1 To 20000, 1 To 8), t As Single, k As Long '定义相关的变量

t = Timer ''开始记时

maxrow = Cells(Rows.Count, 1).End(xlUp).Row '取得A列最后一个有数据的单元格的行号 arr1 = Range(\把区域赋给数组arr1 For i = 1 To maxrow '遍历数组arr1的一维

arr2 = Split(arr1(i, 1), \,\按逗号分开,全部赋值给数组arr2 For k = 0 To UBound(arr2) '遍历数组arr2的成员

arr3(i, k + 1) = arr2(k) '把数组arr2装进一个新的数组Arr3,这里要注意为什么要arr3(i, k + 1)

'因为你的k初始值是0,而你定义arr3(1 To 20000, 1 To 8)的最小下标是从1开始的,所以要加1

Next k '

第 43 页 共 52 页

Excel 2007 VBA 教程

Erase arr2 '清除数组arr2 Next i

Range(\把数组arr3一次性与于单元格区域 Columns(\自动适合列宽

MsgBox \用时\秒\显示程序运行的时 End Sub 7. vlookup

(1). 实例 根据A列的姓名依次显示出它们的底薪

Sub test()

Dim Maxrow As Long, arr, arr1, arr2, arr3 '定义相关的变量

Maxrow = Cells(Rows.Count, 1).End(xlUp).Row '取得A列最后一个有数据的单元格行号 arr3 = Array(\小老鼠\代晓蓉\张三\李诗诗\李飞\马丽\把要查找的数据赋值给数组arr3

arr = Range(\把单元格区域赋值给数组arr

arr1 = Application.WorksheetFunction.VLookup(arr3, arr, 3, 0) ' 利用Vlookup函数查找后得到一个新的数组arr1

'大家要注意,在VBA里,一般情况在工作表它的参数可以用数组,那么在VBA也可以用数组,所以Vlookup第一个参数我放了数组arr3进去了

For i = 1 To UBound(arr1) '和用循环语句把查找的结果用显示函数Msgbox显示出来 MsgBox arr3(i - 1) & \的底薪是\ Next i End Sub

8. 同样的方法我们可以用这几个函数来实现其它的,这里我就不多说了,同学们可以自己去尝试一下。

sumif,small,large,match

二. 实例 查找不及格记录 Sub test()

Dim Maxrow As Long, arr1, arr2(), i As Long, x As Long '定义相关的变量

Maxrow = Cells(Rows.Count, 1).End(xlUp).Row '取得A列最后一个数据的单元格行号 arr1 = Range(\把区域数据装入数组arr1中

For i = 1 To UBound(arr1, 1) '遍历数组arr1中的一维,相当于工作表中的行数 If arr1(i, 4) < 60 Then '如果arr1的值小于60,那么 x = x + 1 '累加x ,起到记数器的作用

ReDim Preserve arr2(1 To 4, 1 To x) '重新定义动态数组arr2,为什么这样定义呢,因为二维动态数组只能更改二维,不能更改一维

'所以把行和列选互换一下,这样就可以把数组arr1中符合条件的装过数组arr2中,处理完后再通过转置函数又要把行和列换回来

arr2(1, x) = arr1(i, 1) ' arr2(2, x) = arr1(i, 2) ' arr2(3, x) = arr1(i, 3) ' arr2(4, x) = arr1(i, 4) ' End If ' Next i

[F1:I1] = Array(\学号\姓名\性别\成绩\把标题写在单元格区域F1:I1

[F2].Resize(UBound(arr2, 2), 4) = Application.WorksheetFunction.Transpose(arr2) '把数组arr2成员一次性写于单元格区域 '不过这里一定要注意,满足要求的,也就是说不及格的人数,是用UBound(arr2, 2),不是Bound(arr2, 1)

第 44 页 共 52 页

Excel 2007 VBA 教程

'如果是用1,arr2数组的一维的上界是4,重新定义数组已经申明了,所以是用2,数组arr2二维的上界才是不及格的人数 End Sub

第十五讲 字典基础知识(一)

一. 申明(大家不要以为佛山小老鼠是用字典高手,我也还是菜鸟,呵可,记住,不要拿字典来考我,我是把学

字典的一点心得分享,希望能帮到比我还菜的VBA 爱好者。)

二. 开头白:字典,早一年,我刚按触VBA的时候,看到别人写的一些代码怎么也看不懂,后来听别人说,一是

Vba里的数组,还有就是字典,这两个知识点可以优化代码和提高代码的运行速度,于是,我也蠢蠢欲动,可以怎么也不明白。于是放弃了学习VBA,因为自己会写代码,也是一些简单的录制宏,修改宏,最多也只能用上循环语句。很羡慕VBA高手写的那些长长的代码,那天我的水平有这么高就好了,然后我到ExcelHome论坛上找了这方面的资料,如“山菊花老师的墙上那一串串红辣椒——数组入门讲座”,“蓝桥玄霜老师:常见字典用法集锦及代码详解”,以及“蓝色幻想”老师的一些视频和贴子,真的很感谢这些老师,总算把我这个菜鸟带入了门

1. 字典的引用方式

(1). 前期绑定:方法——>>Alt+F11——>>工具菜单——>>引用——>>浏览——>>选择scrrun.dll。如图

26

a. 优点:对于刚学习字典的朋友好,可以弹出成员列表出来。

b. 缺点:把文件发给别人,别人如果不引用下面这个动态Dll文件就不能用这段代码

图 26

(2). 后期绑定 要用代码实现

方法

Set dic= CreateObject(\

a. 优点:可以发给别人使用,不要担心不能用了 b. 缺点:不利用编程人员编辑代码

(3). 备注:有时可能还是用不了, …… 此处隐藏:1523字,全部文档内容请下载后查看。喜欢就下载吧 ……

菜鸟也懂VBA-excle2007VBA入门教程(17).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/566040.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)