前兩天我們剛介紹了正則表達式函數(shù),今天就遇到了一個數(shù)據(jù)處理的實際問題。本來按照習慣使用了其他方法,后來想到可以用正則表達式函數(shù),就又處理了一遍。今天分享一下這個過程和處理方法,供大家參考。 原始數(shù)據(jù)是這樣的, 要求也簡單: 1. 提取每行的數(shù)據(jù)求和 2. 將數(shù)據(jù)轉換成下面的形式: 第一個需求還是很簡單的,我們上次介紹的時候其實提到過。以第一行數(shù)據(jù)為例,
這個公式就可以提取其中的所有數(shù)據(jù), 接下來只要將這個數(shù)組求和就好了。因為這個函數(shù)結果是文本,不要忘了轉換,
但是第二個需求就復雜一些了。分析一下,需要做如下的工作:
第一步很簡單,實際上我們剛才已經做了演示,可以將B列每個單元格的數(shù)據(jù)中的各產品數(shù)據(jù)取出。同樣的方法也可以將各個字母取出,只不過模式字符串需要修改一下:
不過這里需要提醒一下,由于提取的數(shù)據(jù)組成的數(shù)組是多行數(shù)組,跟我們需要的多列數(shù)組不一樣。(轉換很容易實現(xiàn),轉置即可) 第二步本身也不復雜,有很多方法實現(xiàn),比如可以使用GROUPBY函數(shù)實現(xiàn),不過考慮到還有第三步,這個方法未必好。 第三步多行合并可以使用VSTACK函數(shù)。但是我們不能直接使用,因為第一步處理完成后,各行數(shù)據(jù)中的產品名稱順序和個數(shù)未必相同。 這些處理就會比較啰嗦。 所以我們就修改一下實現(xiàn)思路。 第一步不變,還是使用正則函數(shù)提取名稱和數(shù)據(jù)數(shù)組。 接下來,我們增加一個標題行數(shù)組: 這里我們僅僅用了數(shù)據(jù)中出現(xiàn)的四個字母,其實可以用SEQUENCE函數(shù)生成所有的字母列表。這樣通用性更強。 然后呢,我們使用這個標題行數(shù)組的每一個元素對上面B列每一個數(shù)據(jù)得到來的兩個數(shù)組進行條件求和,比如,對于”A: 我們計算B2中產品名稱 = "A"的所有數(shù)據(jù)之和。 由于SUMIF不能用于數(shù)組,所以我們改用SUMPRODUCT:
其中,titleC是正則函數(shù)得到的產品名稱數(shù)組,dataC是得到的數(shù)據(jù)數(shù)組。 我們就可以得到B列數(shù)據(jù)每一行對應于標題行數(shù)組中每一個元素的數(shù)據(jù)。 于是就得到了結果表。 上面的過程顯然可以使用MAKEARRAY函數(shù)輕松實現(xiàn)。 下面是實現(xiàn)的公式:
其中第5~15行就是生成結果數(shù)據(jù)的實現(xiàn)過程。 在MAKEARRAY中,根據(jù)當前的行,列(r,c),首先取出當前的產品名稱(第8行),當前的B列數(shù)據(jù)(第9行); 然后使用正則表達式取出B列數(shù)據(jù)中的產品名稱數(shù)組和數(shù)據(jù)數(shù)組(第10,11行); 第15行進行條件求和。 由于正則函數(shù)剛推出不久,看起來AFE對它的支持不到位,所以上述公式如果寫在AFE中,保存時會提示有問題。 解決方案是將這個公式寫在公式編輯欄中。 當然,可以在AFE中寫完(這里更方便編輯公式),但是不保存,而是復制到編輯欄中。 詳情咨詢客服(底部菜單-知識庫-客服) Excel+Power Query+Power Pivot+Power BI 自定義函數(shù) 底部菜單:知識庫->自定義函數(shù) 面授培訓 底部菜單:培訓學習->面授培訓 Excel企業(yè)應用 底部菜單:企業(yè)應用 |
|