应用技巧二十一:数组公式

对于希望精通Excel函数与公式的用户来说,数组运算和数组公式是必须跨越的门槛。通过本文的介绍,让用户能够对数组公式和数组运算有更深刻地理解,并能够利用数组公式来解决实际工作中的一些疑难问题。

一、理解数组

1. Excel中数组的相关定义

在Excel函数与公式应用中,数组是指按一行、一列或多行多列排列的一组数据元素的集合。数据元素可以是数值、文本、日期、逻辑值和错误值。

数组的维度是指数组的行列方向,一行多列的数组为横向数组,一列多行的数组为纵向数组。多行多列的数组则同时拥有纵向和横向两个维度。

数组的维数是指数组中不同维度的个数。只有一行或一列在单一方向上延伸的数组,成为一维数组;多行多列同时拥有两个维度的数组成为二维数组。

数组的尺寸是以数组各行列上的元素个数来表示的。一行N列的一位横向数组,其尺寸表示为1*N;一列N行的一维纵向数组,其尺寸表示为N*1;对于M行N列的二维数组,其各行或各列的元素个数必须相等,呈矩形排列,其尺寸表示为M*N。

2. Excel中数组的存在方式

(1)常量数组

在Excel函数与公式应用中,常量数组是指直接在公式中写入数组元素,并用大括号{}在首尾进行识别的文字串表达式。其不依赖单元格区域,可直接参与公式的计算。

顾名思义,常量数组的组成元素只可为常量元素,决不能是函数、公式或单元格引用。常量元素中不可以包含美元符号、逗号、圆括号和百分号。

一维纵向常量数组(通常称为“行数组”)的各元素用半角分号“;”间隔,如下式,表示尺寸为5行*1列的数值型常量数组:

={1;2;3;4;5}

一维横向量数组(通常称为“列数组”)的各元素用半角逗号“,”间隔,如下式,表示尺寸为1行*3列的文本型常量数组:

={“张三”,”李四”,”王五”}

文本型常量元素必须用半角双引号“””将首尾标识起来。

二维常量数组的每一行上的元素用半角逗号“,”间隔,每一列上的元素用半角分号“;”间隔。如下式,表示尺寸为4行*3列的二维混合数据类型的数组,包含数值、文本、日期、逻辑值和错误值。

={1,2,3:#N/A,5,TRUE;”田径”,”2008-8-8”,”股市”;#VALUE!,FALSE,12}

提示:如果用户在手工输入数组的过程中感觉非常繁琐,可以借助单元格引用来转换为常量数组。

例如当用户在单元格A1:A7中分别输入“A到G”的字符后,再在B1中输入:=A1:A7,并选中公式段中的A1:A7,同时按下键,Excel会自动将单元格引用转换为常量数组。

(2)区域数组

如果在公式或函数参数中引用工作表的摸个单元格区域,且其中函数参数不是单元格引用或区域类型(reference、ref或range),也不是向量(vector)时,Excel会自动将该区域引用转换成由区域中各单元格的值构成的同维数同尺寸的数组,可称之为区域数组。

区域数组的维度和尺寸与常量数组完全一致,而在公式运算中会自动将“区域引用”进行转换,这类区域数组也是用户在利用“公式求值”查看公式运算过程时常看到的。

(3)内存数组

内存数组是指某一公式通过计算,在内存中临时返回多个结果值构成的数组。而该公式的计算结果,不必存储到单元格区域中,便可作为一个整体直接嵌套入其他公式中继续参与计算。该公式本身则称之为内存数组公式。

内存数组与区域数组的主要区别在于,区域数组通过引用而非通过公式计算获得,但其不是通过公式计算在内存中临时获取的,而是作为常量直接输入的。

可以用一句话概括内存数组的特点,即内存数组生于内存,存于内存。

(4)命名数组

命名数组是指,使用命名公式(即名称)定义的一个常量数组、区域数组或内存数组。该名称可在公式中作为数组来调用。在数据有效性(有效性序列除外)和条件格式的自定义公式中,不接受常量数组,但可将其命名后,直接调用名称进行运算。

二、数组公式与数组运算

(1)认识数组公式

简单地说,数组公式是指区别与普通公式,并以按下组合键来完成编辑的特殊公式。作为标识,Excel会自动在编辑栏中给数组公式的首尾加上大括号“{}”。数组公式的实质是单元格公式的一种书写形式,用来显式地通知Excel计算引擎对其执行多项计算。

所谓的多项计算是指,对公式中有对应关系的数组元素同步执行相关计算,或在工作表的相应单元格区域站宏同时返回常量数组、区域数组、内存数组或命名数组中的多个元素。

但是,并非所有执行多项计算的公式,都必须以数组公式的输入方式来完成编辑。一些函数在其array数组类型或vector向量类型的参数中使用数组,并返回单一结果值时,Excel不需要获得通知就可以直接对其执行多项计算。例如,Excel

2010中SUMPRODUCT、LOOKUP、MMULT以及新增的MODE.MULT函数。

(2)多单元格联合数组公式

如果一个函数或公式返回多个结果值,并需要存在单元格区域中,那么额借助多单元格数组公式来实现。

1多单元格数组公式计算销售额

如图1所示,选择G3:G11单元格区域后,输入如下数组公式后,并按下结束编辑:{=E3:E11*F3:F11}(注:输入公式时不包括外层大括号)

此公式将各种商品的销售数量分别乘以各自的单价,获得一个内存数组{44;200;36;112;125;54;28;60;21},将其写入指定的G3:G11单元格区域中显示出来(在本例中生成的内存数组与写入的单元格区域尺寸完全一致)。

本示例只是为了说明数组公式的用法,本应用其实相当于选择G3:G11单元格区域后,在G3单元格中使用相对引用输入如下普通公式,并按下结束编辑:

=E3*F3

多单元格数组公式在每个单元格中显示相同的公式,并按一个公式执行计算,可提高运算效率。

在某些时候,用户编写公式的运算结果无法生成内存数组,但后续的公式有需要对结果进行再处理,也可以考虑使用多单元格公式来协助处理。

2利用多单元格数组公式计算最小值

如图2所示,列举了3列随机数值,下面的公式将分别从各列中取得最小值,并写入指定的单元格中,可以输入多单元格数组公式如下。

例如在E2:G2单元格中输入多单元格联合数组公式如下:

{=MIN(INDEX($A$3:$C$10,,{1,2,3}))}

由于INDEX函数地2、3个参数都不支持数组元素来生成内存数组,因此该公式的结果只能放置于多单元格中才能显示。

当然,如果该示例需要生成内存数组,可以使用以下两个公式:

公式1:{=CHOOSE({1,2,3},MIN($A$3:$A$10),MIN($B$3:$B$10),MIN($C$3:$C$10))}

公式2:{=SUBTOTAL(5,OFFSET($A$3:$A$10,,{0,1,2}))}

注意:数组公式首尾的大括号{}是由组合键自动生成,千万不要试图手工输入,否则Excel只能识别其为文本字符,而无法被当成公式正确地运算。

(3)单个单元格数组公式

3:单个单元格数组公式

同样沿用例1的饮品销售数据,下面可以使用一个公式来完成对所有饮品总销售利润进行统计,如图3所示。

本例中G13单元格的数组公式如下:

{=SUM(E3:E11*F3:F11)*G1}

该公式先在内存中执行计算,将各商品的销量和单价分别相乘,然后再将数组中的所有元素用SUM函数汇总,得到总销售额,最后再乘以G1单元格的利润率,即可得出最终结果。

由于SUM函数的参数不能直接支持数组,所以在输入该公式时,必须以数组公式的形式输入,来通知Excel执行多重计算。这样就可以不借助任何辅助单元格,直接完成计算,并返回结果值。

本例中的公式还可用SUMPRODUCT函数来替代:

=SUMPRODUCT(E3:E11*F3:F11)*G1

SUMPRODUCT函数的所有参数都是array数组类型参数,直接支持多项计算,因此该公式不需要以数组公式的形式输入公式,也能够正常返回结果。

(4)数组公式的编辑

与Excel

2003一样,在Excel 2010中同样对多单元格数组公式有如下限制。

a. 不能单独改变公式区域某一部分单元格的内容;

b. 不能单独移动公式区域的某一部分单元格;

c. 不能单独删除公式区域的某一部分单元格;

d. 不能在公式区域插入新的单元格。

如果需要修改多单元格数组公式,操作步骤如下。

步骤1选择公共区域,按F2键进入编辑模式。

步骤2修改公式内容后,再次按下组合键结束编辑。

如果希望删除原有的多单元格数组公式,操作步骤如下。

步骤1选择任意一个多单元格数组公式单元格,按F2进入编辑状态。

步骤2删除该单元格公式内容后,再次按下组合键结束编辑。

另外,读者还可以先按下组合键,选择多单元数组公式后,再按下键进行删除。


��8����

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

推荐阅读更多精彩内容

  • VBA订制工具栏 http://club.excelhome.net/thread-1047254-1-1.htm...
    大海一滴写字的地方阅读 2,244评论 0 0
  • 上次给大家分享了《2017年最全的excel函数大全(2)——web函数》,这次分享给大家查找和引用函数(上)。 ...
    幸福的耗子阅读 4,679评论 1 5
  • 温暖的4月,爷爷留下的君子兰又盛放了!时光匆匆,花开又是一年。2010年爷爷离开我们后的3个这盆年头君子兰都没有开...
    虹霖_703阅读 226评论 0 2
  • 大脑与心理的结合改变身体状态。在出现症状时,首先想到的是心理传递忽略大脑思维。 无形中控制方式掩盖...
    杨平的阅读 610评论 0 0
  • 是高考,同一个考场 找寻你,往不同的方向 排长队,去撑一顶雨伞 遮住你嫣红的笑颜 青春没有伤痕 落败的我选择再来一...
    萧十一涩狼阅读 215评论 0 0