二十三讲 数组与函数

函数可以应用于数组,不需要进行循环。

一 函数在数组中的应用

1.1 数组的最值

Sub s()

Dim arr1()

arr1 = Array(1, 12, 4, 5, 19)

MsgBox "1,12,4,5,19最大值" & Application.Max(arr1)

MsgBox "1,12,4,5,19最小值" & Application.Min(arr1)

MsgBox "1,12,4,5,19第二大值" & Application.Large(arr1, 2)

End Sub

1.2 求和

MsgBox "1,12,4,5,19的和" & Application.Sum(arr1)

application.sum(数组)

1.3 统计个数

在工作表中中,统计个数用countif函数,这个函数的第一个参数是单元格引用,所以countif无法对数组引用。对于数组,利用counta(已经填充内容) 和count(数字个数)函数统计VBA数组的数字个数以及所有已经填充内容的个数。

Sub s1()

Dim arr1, arr2(0 To 10), x

arr1 = Array("a", "3", "", 4, 6)

For x = 0 To 4

arr2(x) = arr1(x)

Next x

MsgBox "数组1的数字个数" & Application.Count(arr1) '结果是2

MsgBox "数组1的填充数值个数" & Application.CountA(arr1) '结果是5

MsgBox "数组2的填充数值个数" & Application.CountA(arr2) '结果是11

MsgBox "数组2的填充数字个数" & Application.Count(arr2) '结果是2

End Sub


1.4在数组里查找

在工作表中利用match函数,数组中也可以用match函数。

Sub s2()

Dim arr

On Error Resume Next

arr = Array("a", "c", "b", "f", "d")

MsgBox Application.Match("f", arr, 0)

If Err.Number = 13 Then

MsgBox "not find"

End If

End Sub

On Error Resume Next的意思就是略过错误

If Err.Number = 13就是说执行以上语句以后有没有错误13(类型不匹配)生成(如果执行一个语句产生错误时会自动设置Err对象的Number和Description等等属性)

二 可以生成数组的函数

2.1 split,join函数

Sub s3()

Dim sr, arr

sr = "A-BC-FGR-H"

arr = VBA.Split(sr, "-")

MsgBox arr(2)

End Sub

JOIN 函数,把拆分后的字符串用逗号连接起来。

Sub s3()

Dim sr, arr

sr = "A-BC-FGR-H"

arr = VBA.Split(sr, "-")

MsgBox Join(arr, ",")

End Sub


2.2 filter 函数

按条件筛选符合条件的值组成一个新的数组。filter只能进行模糊筛选,是一种包含关系的筛选,没有办法做到精确筛选,若想精确筛选只含有W的,只能用循环了。

filter(数组,筛选条件,是/否),如果是,则返回包含的数组,如果否则返回非包含的数组。

Sub s4()

Dim arr, arr1, arr2

arr = Application.Transpose(Range("a2:a10")) ‘列化为行,将九行一列数组化为一维数组

arr1 = VBA.Filter(arr, "W", True)

arr2 = VBA.Filter(arr, "W", flase)

Range("b2").Resize(UBound(arr1) + 1) = Application.Transpose(arr1) ’将一维数组化为一列数据进行填充

Range("c2").Resize(UBound(arr2) + 1) = Application.Transpose(arr2)

End Sub

2.3 index函数

index函数可以把二维数组的某一列或某一行截取出来,构成一个新的数组。

application.index(二维数组,0,列数) 返回二维数组

application.index(二维数组,行数,0) 返回一维数组

若是想截取第几行到第几行,只能用循环解决了。

Sub s5()

Dim arr, arr1, arr2

arr = Range("a2:d6")

arr1 = Application.Index(arr, , 1)

arr2 = Application.Index(arr, 4, 0)

Stop

End Sub

2.4 vlookup函数

vlookup函数的第一个参数可以用VBA数组,返回的也是一个VBA数组。

Sub s6()

Dim arr, arr1

arr = Range("a2:d6")

arr1 = Application.VLookup(Array("b", "c"), arr, 4, 0) '先构建一个需要查找的内容的一维数组

Stop

End Sub

关于Vlookup 函数

Application.VLOOKUP(lookup_value, table_array, column_index, range_lookup)

http://www.exceltrick.com/formulas_macros/vlookup-in-vba/

2.5 sumif 和countif函数

countif和sumif函数的第二个参数都可以使用数组,所以也可以返回一个VBA 数组。

Sub s7()

Dim T

T = Timer

Dim arr

arr = Application.SumIf(Range("a2:a10000"), Array("B", "C", "G", "R"), Range("B2:B10000"))     '判断区域,条件区域,计算区域

MsgBox Timer - T

End Sub

counif函数同理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 1.1 VBA是什么 直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得...
    浮浮尘尘阅读 21,662评论 6 49
  • 本例为设置密码窗口 (1) If Application.InputBox(“请输入密码:”) = 1234 Th...
    浮浮尘尘阅读 13,535评论 1 20
  • 有些时候我们需要用Excel处理大量的数据,这时候如果还用range引用单元格内容就会显得有点慢,这时候如果采用数...
    鸣人吃土豆阅读 22,934评论 1 43
  • 数组也可以设置格式么? 数组除了数字类型外,当然没有颜色,字体等格式,但是range对象可以表示多个连接或者不连接...
    肉丸子豆阅读 770评论 0 0
  • 题记:话说,鸡生蛋,蛋生鸡!那个在前呢? 前言:不知道今日头条啥时候发布滴,问了下度娘~2016年8月发布的第一个...
    大周同学666阅读 337评论 5 4