陶泽昱Excel应用技巧大全第23期:数组构建及填充

利用函数来重新构造数组在数组公式中用得越来越多,例如在生成工资条时的循环序列、利用行函数结合INDIRECT函数生成的自然数序列等,用户掌握相关的数组构建方法,对于数组公式的运用很有帮助。

一、行列函数生成数组

在数组运算中,经常会使用“自然数序列”来作为某些函数的参数,如INDEX函数的第2和第3个参数,OFFSET函数除第1个参数以外的其他参数等,如果手工输入常量数组则比较麻烦,而且容易出错,此时利用ROW/COLUMN函数结合INDIRECT函数来生成序列就非常方便实用。

例1产生1~10的自然数垂直序列和水平序列

下面的公式产生1~10的自然数垂直序列和水平序列,如图1所示。

垂直序列:

{=ROW(INDIRECT(“1:10”))}

水平序列:

{=CLUMN(INDIRECT(“A1:J1”))}

公式中使用INDIRECT函数来生成引用,再利用ROW函数或COLUMN函数根据引用返回对应的行列号,从而得到自然数序列。

同理,下面的公式利用INDIRECT函数生成“A-Z”的26个大写字母行数组:

{=CHAR(ROW(INDIRECT(“1:26”))+64)}

例2

INDIRECT函数根据RC1引用样式来生成水平数组

假设A9:J9单元格区域为非空单元格,下面的多单元格数组公式可以生成1~10的自然数水平序列,如图2所示。

{=COLUMN(INDIRECT(“RC1:RC”&COLUMNS(A9:J9),0))}

二、一维数组生成二维数组

1. 一维区域转变二维数组

利用引用函数来对学生考试进行随机排位,最终实现了将1列学员列表排放在指定的考室中,在该公式中就使用了利用ROW和COLUMN函数来转换二维区域的用法,但如果需要将其生成内存数组,原来也大致相同。

例3构造二维数组填充学员数据

在如图3所示的学员明细表中,下面的公式实现将B列的9名学员按顺序排列到3行3列的二维区域中。

D2:F4多单元格联合数组公式如下:

{=T(OFFSET($B$1,(ROW($A$1:$A$3)-1)*3+COLUMN($A$1:$C$1),0))}

公式主要利用ROW函数结合COLUMN函数分别生成{0;3;6}纵向数组和{1,2,3}横向数组,再利用数组运算的原理生成3行3列的二维数组,该结果作为OFFSET函数的引用参考,最终由T函数将取得的值转换为真正的文本填入D2:F4单元格区域中。

如果用户将该公式添加为命名公式,其结果即为存在于内存中的“命名数组”。

2. 两列数据互换生成二维数组

例4构造数组使VLOOKUP实现逆向查询

如图4所示,展示了一份人员信息表,下面将使用VLOOKUP函数实现通过查询人员姓名返回其对应的员工号数据。

B5单元格的逆向查询公式为:

=VLOOKUP(B2,IF({1,0},E2:E9,D2:D9),2,0)

该公式主要利用IF({1,0},E2:E9,D2:D9)核心公式段,利用{1,0}的横向数组,与两个纵向数组进行运算,将姓名列调整为左列,员工号调整为右列,其结果为:

{“叶知”,”A01048”;“陈佩亮”,”A02267” ; “李旭”,”A03236”; “黄思露”,”A05032” ; “潘贺明”,”A05241”; “李影欣”,”A07546” ; “蔡志”,”A08084”; “张博”,”A09095”}

最后,通过VLOOKUP函数进行按姓名查找返回员工编号:A05023。

三、提取子数组

在某些实际应用中,有时候需要用户从一些列数据中取出部分数据提供给其他应用进行数据再处理,例如从员工信息表中提取指定要求的员工列表,或者从成绩表中将总成绩大于平均成绩的人员列举出来,这里将重点介绍如何通过构造数组序列的方式来实现数据的提取。

例5取得奖牌榜中第4到第10名的国家名称

如图5所示,展示了一份2010年青奥会的奖牌榜列表,下面按要求将第4~10名的国家名称提取出来,并生成内存数组。

由于源数据为单列的文本数据,因此可以利用OFFSET函数结合ROW函数构造4~10名的自然序列进行数据提取,如在H3:H9单元格提取内存数组的公式如下:

{=T(OFFSET($B$2,ROW(INDIRECT(“4:10”)),0))}

该公式主要使用ROW函数与INDIRECT函数构造{4;5;6;7;8;9;10}的自然数序列,再利用OFFSET函数逐个提取出来,最终利用T函数将其转换为真正的内存数组。

如果奖牌榜的国家名称是由其他函数公式生成的数组,而针对常量数组(或内存数组)中提取指定的子数组,则需要使用LOOKUP函数来协助处理。

如定义一个名称为DataList,其结果为:

{“中国”;“俄罗斯”;“韩国”;“乌克兰”;“澳大利亚”;“日本”;“匈牙利”;“意大利”;“古巴”;“阿塞拜疆”;“法国”;“美国”;“德国”;“英国”;“加拿大”}

下面将从中提取第1~3名的国家名称,具体公式如下:

{=LOOKUP(ROW($1:$3),ROW(INDIRECT(“1:”&COUNTA(DataList))),DataList)}

该公式同样使用了ROW函数生成的自然序列,唯一的差别在于,该公式中分别生成了1~3的子序列和包括所有数据1~15的全序列,最后利用LOOKUP函数针对子序列进行查找,最终返回对应的前3名国家名称:{“中国”;“俄罗斯”;“韩国”}。

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

推荐阅读更多精彩内容