|
盛夏時節(jié),高考剛過, 本期說一點跟高考有關(guān)系的。 什么東西跟高考有關(guān)系? 就是看不懂、學(xué)不會和考不過的內(nèi)容…… (預(yù)感本期將創(chuàng)閱讀量新低) 本篇可能是講述VLOOKUP、數(shù)組和IF{0,1}, 最透徹的網(wǎng)文,立文為證! 感受被數(shù)學(xué)支配的恐懼吧! 喵哈哈哈…… 一、【數(shù)組】 數(shù)組是啥? 就是一大堆數(shù)據(jù)組合在一起。 數(shù)組其實是計算機專業(yè)的概念, 和數(shù)學(xué)專業(yè)內(nèi)的數(shù)組不是太一樣, 數(shù)學(xué)專業(yè)(線性代數(shù)里的)內(nèi)的數(shù)組, 是一個按照長方陣列排列的復(fù)數(shù)或?qū)崝?shù)集合, 其準確的定義叫矩陣(Matrix)。 計算機專業(yè)中的數(shù)組和矩陣的結(jié)構(gòu)相似, 但數(shù)組中的元素可以是字符或其他, 矩陣中的只能是數(shù), 這是二者最直觀的區(qū)別。 EXCEL里, 把數(shù)據(jù)填入行和列內(nèi), 本質(zhì)上就是數(shù)組。 單獨一行叫單行數(shù)組,是一維數(shù)組, 表達式{1,2,3…},用逗號【,】隔開; 單獨一列的叫單列數(shù)組,是二維數(shù)組, 是最簡單的二維數(shù)組,不是一維數(shù)組哦, 表達式{1;2;3…}, 在行與行之間,即多個一維數(shù)組間, 用分號【;】隔開。 多行、多列的區(qū)域,組成了二維數(shù)組, 表達式如{1,2,3;4,5,6;7,8,9;…}。 維度的理解很簡單, 把行看成是X軸,是一個維度,一維, 把列看成是Y軸,則再加一個維度,變成二維。 單獨一列,其X軸上固定寬度是一列,而不是沒有, 所以,單列數(shù)組是二維,而不是一維。 到目前為止,好像很簡單。 甲純們平時在做表,其實都是在玩數(shù)組。 二、【VLOOKUP與數(shù)組】 VLOOKUP函數(shù)的【查找返回區(qū)域】, 很多情況下, 區(qū)域內(nèi)的原始數(shù)據(jù)并不能馬上應(yīng)用, 而是要經(jīng)過一系列的分解或者組合或者重構(gòu)。 比如下圖: VLOOKUP要通過查找特征值【ERP號】, 得到相應(yīng)的【姓名】。 但【ERP號】列并不在查找返回區(qū)域內(nèi)的第一列, 所以要改變它在區(qū)域(數(shù)組)內(nèi)的位置, 最簡單的方法是直接新增一行并且做數(shù)據(jù)映射, 這個在之前的文章中有演示過。 傳送門>>>VLOOKUP列的映射 如果說有強迫癥, 或者條件不允許, 就是無法改變表格的格式, 那有沒有組合或重構(gòu)【查找返回區(qū)域】的其他辦法? 百毒一下,有很多方法提到了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)】是個什么鬼? 它是條件數(shù)組函數(shù)。 在EXCEL有看到大括號【{}】的出現(xiàn), 就代表有數(shù)組的存在。 【IF({0,1},真區(qū)域,假區(qū)域)】, 整體的意思是說, 根據(jù)判斷條件,創(chuàng)建一個數(shù)組, 暫時存在內(nèi)存里面(即內(nèi)存數(shù)組), 不顯示出來(所以在表格內(nèi)看不見)。 前面說過,其實二維數(shù)組等同于EXCEL的行列區(qū)域, 所以VLOOKUP函數(shù)可以作用于數(shù)組上。 {0,1}有3層意思, 1是創(chuàng)建的數(shù)組的形式是{X,X}, 即2列的二維數(shù)組。 就像下圖: 2是{0,1}是IF的判斷條件, 它也是一個數(shù)組, 應(yīng)按順序判斷數(shù)組內(nèi)的數(shù)據(jù), 先判斷數(shù)據(jù)【0】(即為假), 于是將IF({0,1},真區(qū)域,假區(qū)域)的【假區(qū)域】的數(shù)據(jù), 填充到創(chuàng)建的內(nèi)存數(shù)組內(nèi)的第一列; (注:IF函數(shù)中0為假,1和其他的任意數(shù)字均為真, {0,1}和{FLASE,2}和{0,100}等等,本質(zhì)上沒有差別) 接著判斷數(shù)據(jù)為1(即為真), 于是將IF({0,1},真區(qū)域,假區(qū)域)的【真區(qū)域】的數(shù)據(jù), 填充到內(nèi)存素組內(nèi)的第二列。 IF({0,1},A1:A7,D1:D7)的效果示意圖如下:
3是{0,1},判斷結(jié)果是先假、后真, 剛好把【IF({0,1}】,真區(qū)域,假區(qū)域)內(nèi)的 【真區(qū)域】和【假區(qū)域】的這2個, 本來按順序是先真后假的數(shù)據(jù), 對調(diào)了一下, 也就實現(xiàn)了調(diào)換列的順序的目的。 如果是使用【IF({1,0}】,判斷結(jié)果先真、后假, 那么公式就要變成: VLOOKUP(A:A,IF({1,0},D1:D7,A1:A7),2,0)。
好吧,純老師自己好像也很亂。 總之就是利用IF({X,X},真區(qū)域,假區(qū)域), 按照特定的判斷條件, 實現(xiàn)調(diào)換列順序的功能, 并生成一個新的內(nèi)存數(shù)組。 那看完上述的知識點, 希望有假純能夠舉手質(zhì)疑: 花這么多氣力繞這么一大圈, 就為了調(diào)個列順序?! 丫閑得吧。
四、【IF({X,X,X,X…}】 使用IF({X,X},真區(qū)域,假區(qū)域), 費這么大勁就形成兩列的數(shù)組, 根本就無法應(yīng)對日常很多列的數(shù)據(jù)。 如果要生成包含更多列的內(nèi)存數(shù)組呢? 關(guān)鍵在于判斷條件數(shù)組【{ }】內(nèi)的形式。
使用IF({X1,X2,X3…Xn},真區(qū)域,假區(qū)域) 生成內(nèi)存數(shù)組, 最簡單的可以理解為【摘取】的概念。 【摘取】是列的摘取,即看中了哪一列, 就把該列摘取出來填充到內(nèi)存數(shù)組的相應(yīng)列。 步驟有2個: 舉例IF({0,1},A1:A7,D1:D7) 1、確定要【摘取】的區(qū)域 {0,1}先演化為【{取假區(qū)域的某一列,取真區(qū)域里的某一列}】 2、確定要【摘取】的列 確定原則是 被【摘取】的列與內(nèi)存數(shù)組的列序號相等。 則【{取假區(qū)域的某一列,取真區(qū)域的某一列}】 進一步演化為:【{取假區(qū)域的第1列,取真假區(qū)域的第2列}】 再加一個重點: 3、僅單列等于無數(shù)列 根據(jù)第二部演化的【摘取】條件, 【取真區(qū)域里的第2列】無法實現(xiàn), 因為真區(qū)域【A1:A7】只有一列,并沒有第2列, 根據(jù)EXCEL單列等于無數(shù)列的默認條件, 直接取【A1:A7】。 但如果區(qū)域內(nèi)有2列,而【摘取】條件要求第3列, 則內(nèi)存數(shù)組會出錯,所以僅單列等于無數(shù)列。 IF({0,1},A1:A7,D1:D7), 最終生成的內(nèi)存數(shù)組為{D1:D7,A1:A7}。 照貓畫虎,推導(dǎo)其他例子。 IF({1,1},A:B,C:D): {1,1}演化為【{取真區(qū)域的第1列,取真區(qū)域的某2列}】, 故生成的內(nèi)存數(shù)組為{A:A,B:B}。 IF({0,0},A:B,C:D): {0,0}演化為【{取假區(qū)域的第1列,取假區(qū)域的某2列}】, 故生成的內(nèi)存數(shù)組為{C:C,D:D}。 開始來一點容易混淆的: IF({1,0,1},A:C,D:E): {1,0,1}演化為 【{真區(qū)域第1列,假區(qū)域的某2列,真區(qū)域第3列}】, 故生成的內(nèi)存數(shù)組為{A:A,E:E,C:C}。 第2列取的是假區(qū)域的第2列,是E:E,而不是D:D。 要注意看清楚哦! IF({0,1,0},A:C,D:F): {0,1,0}演化為 【{假區(qū)域第1列,真區(qū)域的某2列,假區(qū)域第3列}】, 故生成的內(nèi)存數(shù)組為{D:D,B:B,F(xiàn):F}。 其他的以此類推、舉一反三。 好了,終于寫完了! 解脫啦……
以下, 獻給參加高考, 和沒參加高考的, 希望,你們都可以證明自己!
所以, 最后, 到底第一個沖出考場的, 是左腳踩線還是右腳踩線呢? |
|
|