分享

VLOOKUP、数组和IF{0,1}

 小蝌蚪631 2020-02-11

盛夏时节,高考刚过,

本期说一点跟高考有关系的。

什么东西跟高考有关系?

就是看不懂、学不会和考不过的内容……

(预感本期将创阅读量新低)

本篇可能是讲述VLOOKUP、数组和IF{0,1},

最透彻的网文,立文为证!

感受被数学支配的恐惧吧!

喵哈哈哈……

一、【数组】

数组是啥?

就是一大堆数据组合在一起。

数组其实是计算机专业的概念,

和数学专业内的数组不是太一样,

数学专业(线性代数里的)内的数组,

是一个按照长方阵列排列的复数或实数集合,

其准确的定义叫矩阵(Matrix)。

计算机专业中的数组和矩阵的结构相似,

但数组中的元素可以是字符或其他,

矩阵中的只能是数,

这是二者最直观的区别。

EXCEL里,

把数据填入行和列内,

本质上就是数组。

单独一行叫单行数组,是一维数组,

表达式{1,2,3…},用逗号【,】隔开;

单独一列的叫单列数组,是二维数组,

是最简单的二维数组,不是一维数组哦,

表达式{1;2;3…},

在行与行之间,即多个一维数组间,

用分号【;】隔开。

多行、多列的区域,组成了二维数组,

表达式如{1,2,3;4,5,6;7,8,9;…}。

维度的理解很简单,

把行看成是X轴,是一个维度,一维,

把列看成是Y轴,则再加一个维度,变成二维。

单独一列,其X轴上固定宽度是一列,而不是没有,

所以,单列数组是二维,而不是一维。

到目前为止,好像很简单。

甲纯们平时在做表,其实都是在玩数组。

二、【VLOOKUP与数组】

VLOOKUP函数的【查找返回区域】,

很多情况下,

区域内的原始数据并不能马上应用,

而是要经过一系列的分解或者组合或者重构。

比如下图:

VLOOKUP要通过查找特征值【ERP号】,

得到相应的【姓名】。

但【ERP号】列并不在查找返回区域内的第一列,

所以要改变它在区域(数组)内的位置,

最简单的方法是直接新增一行并且做数据映射,

这个在之前的文章中有演示过。

传送门>>>VLOOKUP列的映射

如果说有强迫症,

或者条件不允许,

就是无法改变表格的格式,

那有没有组合或重构【查找返回区域】的其他办法?

百毒一下,有很多方法提到了IF{0,1}。

演示:

三、【IF{0,1}】

呃,请问有人看得懂吗?

[B10]=VLOOKUP(A:A,IF({0,1},A1:A7,D1:D7),2,0)。

这里的【IF({0,1},A1:A7,D1:D7)】是个什么鬼?

它是条件数组函数。

在EXCEL有看到大括号【{}】的出现,

就代表有数组的存在。

【IF({0,1},真区域,假区域)】,

整体的意思是说,

根据判断条件,创建一个数组,

暂时存在内存里面(即内存数组),

不显示出来(所以在表格内看不见)。

前面说过,其实二维数组等同于EXCEL的行列区域,

所以VLOOKUP函数可以作用于数组上。

{0,1}有3层意思,

1是创建的数组的形式是{X,X},

即2列的二维数组。

就像下图:

2是{0,1}是IF的判断条件,

它也是一个数组,

应按顺序判断数组内的数据,

先判断数据【0】(即为假),

于是将IF({0,1},真区域,假区域)的【假区域】的数据,

填充到创建的内存数组内的第一列;

(注:IF函数中0为假,1和其他的任意数字均为真,

{0,1}和{FLASE,2}和{0,100}等等,本质上没有差别)

接着判断数据为1(即为真),

于是将IF({0,1},真区域,假区域)的【真区域】的数据,

填充到内存素组内的第二列。

IF({0,1},A1:A7,D1:D7)的效果示意图如下:

3是{0,1},判断结果是先假、后真,

刚好把【IF({0,1}】,真区域,假区域)内的

【真区域】和【假区域】的这2个,

本来按顺序是先真后假的数据,

对调了一下,

也就实现了调换列的顺序的目的。

如果是使用【IF({1,0}】,判断结果先真、后假,

那么公式就要变成:

VLOOKUP(A:A,IF({1,0},D1:D7,A1:A7),2,0)。

 

好吧,纯老师自己好像也很乱。

总之就是利用IF({X,X},真区域,假区域)

按照特定的判断条件,

实现调换列顺序的功能

并生成一个新的内存数组。

那看完上述的知识点,

希望有假纯能够举手质疑:

花这么多气力绕这么一大圈,

就为了调个列顺序?!

丫闲得吧。

四、【IF({X,X,X,X…}】

使用IF({X,X},真区域,假区域),

费这么大劲就形成两列的数组,

根本就无法应对日常很多列的数据。

如果要生成包含更多列的内存数组呢?

关键在于判断条件数组【{ }】内的形式。

使用IF({X1,X2,X3…Xn},真区域,假区域)

生成内存数组,

最简单的可以理解为【摘取】的概念。

【摘取】是列的摘取,即看中了哪一列,

就把该列摘取出来填充到内存数组的相应列。

步骤有2个:

举例IF({0,1},A1:A7,D1:D7)

1、确定要【摘取】的区域

{0,1}先演化为【{取假区域的某一列,取真区域里的某一列}】

2、确定要【摘取】的列

确定原则是

被【摘取】的列与内存数组的列序号相等。

则【{取假区域的某一列,取真区域的某一列}】

进一步演化为:【{取假区域的第1列,取真假区域的第2列}】

再加一个重点:

3、仅单列等于无数列

根据第二部演化的【摘取】条件,

【取真区域里的第2列】无法实现,

因为真区域【A1:A7】只有一列,并没有第2列,

根据EXCEL单列等于无数列的默认条件,

直接取【A1:A7】。

但如果区域内有2列,而【摘取】条件要求第3列,

则内存数组会出错,所以仅单列等于无数列。

IF({0,1},A1:A7,D1:D7)

最终生成的内存数组为{D1:D7,A1:A7}。

照猫画虎,推导其他例子。

IF({1,1},A:B,C:D):

{1,1}演化为【{取真区域的第1列,取真区域的某2列}】,

故生成的内存数组为{A:A,B:B}。

IF({0,0},A:B,C:D):

{0,0}演化为【{取假区域的第1列,取假区域的某2列}】,

故生成的内存数组为{C:C,D:D}。

开始来一点容易混淆的:

IF({1,0,1},A:C,D:E):

{1,0,1}演化为

【{真区域第1列,假区域的某2列,真区域第3列}】,

故生成的内存数组为{A:A,E:E,C:C}。

第2列取的是假区域的第2列,是E:E,而不是D:D。

要注意看清楚哦!

IF({0,1,0},A:C,D:F):

{0,1,0}演化为

【{假区域第1列,真区域的某2列,假区域第3列}】,

故生成的内存数组为{D:D,B:B,F:F}。

其他的以此类推、举一反三。

好了,终于写完了!

解脱啦……

以下,

献给参加高考,

和没参加高考的,

希望,你们都可以证明自己!

所以,

最后,

到底第一个冲出考场的,

是左脚踩线还是右脚踩线呢?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多