日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Excel正則表達(dá)式處理數(shù)據(jù)的一個(gè)實(shí)例 - Excel函數(shù)式編程

 ExcelEasy 2024-06-21 發(fā)布于北京


前兩天我們剛介紹了正則表達(dá)式函數(shù),今天就遇到了一個(gè)數(shù)據(jù)處理的實(shí)際問題。本來按照習(xí)慣使用了其他方法,后來想到可以用正則表達(dá)式函數(shù),就又處理了一遍。今天分享一下這個(gè)過程和處理方法,供大家參考。

問題

原始數(shù)據(jù)是這樣的,

要求也簡單:

1. 提取每行的數(shù)據(jù)求和

2. 將數(shù)據(jù)轉(zhuǎn)換成下面的形式:

分析

第一個(gè)需求還是很簡單的,我們上次介紹的時(shí)候其實(shí)提到過。以第一行數(shù)據(jù)為例,

=REGEXEXTRACT(B2,"[0-9]+",1)

這個(gè)公式就可以提取其中的所有數(shù)據(jù),

接下來只要將這個(gè)數(shù)組求和就好了。因?yàn)檫@個(gè)函數(shù)結(jié)果是文本,不要忘了轉(zhuǎn)換,

=SUM(--REGEXEXTRACT(B2,"[0-9]+",1))

但是第二個(gè)需求就復(fù)雜一些了。分析一下,需要做如下的工作:

  1. 首先需要提取每一行數(shù)據(jù)中的那些字母(產(chǎn)品名稱),還需要提取其中的數(shù)字。

  2. 然后需要匯總這一行中產(chǎn)品名稱相同(字母相同)的那些數(shù)據(jù),比如B4中的數(shù)據(jù)就需要將所有的名稱為A的數(shù)據(jù)匯總到一起。

  3. 經(jīng)過前兩步,我們就已經(jīng)將每行數(shù)據(jù)處理成了兩個(gè)一行多列的數(shù)組,一個(gè)數(shù)組是產(chǎn)品名稱,另外一個(gè)數(shù)組是數(shù)據(jù)。比如對(duì)于B2單元格的數(shù)據(jù)來說,處理結(jié)果就是:
    {"D", "C"}
    {"69", "540"}
    接下來,我們需要將所有的數(shù)據(jù)合并到一起。

第一步很簡單,實(shí)際上我們剛才已經(jīng)做了演示,可以將B列每個(gè)單元格的數(shù)據(jù)中的各產(chǎn)品數(shù)據(jù)取出。同樣的方法也可以將各個(gè)字母取出,只不過模式字符串需要修改一下:

=REGEXEXTRACT(B2,"[A-Z]",1)

不過這里需要提醒一下,由于提取的數(shù)據(jù)組成的數(shù)組是多行數(shù)組,跟我們需要的多列數(shù)組不一樣。(轉(zhuǎn)換很容易實(shí)現(xiàn),轉(zhuǎn)置即可)

第二步本身也不復(fù)雜,有很多方法實(shí)現(xiàn),比如可以使用GROUPBY函數(shù)實(shí)現(xiàn),不過考慮到還有第三步,這個(gè)方法未必好。

第三步多行合并可以使用VSTACK函數(shù)。但是我們不能直接使用,因?yàn)榈谝徊教幚硗瓿珊?,各行?shù)據(jù)中的產(chǎn)品名稱順序和個(gè)數(shù)未必相同。

這些處理就會(huì)比較啰嗦。

所以我們就修改一下實(shí)現(xiàn)思路。

實(shí)現(xiàn)思路

第一步不變,還是使用正則函數(shù)提取名稱和數(shù)據(jù)數(shù)組。

接下來,我們?cè)黾右粋€(gè)標(biāo)題行數(shù)組:
{“A", "B", "C", "D"}

這里我們僅僅用了數(shù)據(jù)中出現(xiàn)的四個(gè)字母,其實(shí)可以用SEQUENCE函數(shù)生成所有的字母列表。這樣通用性更強(qiáng)。

然后呢,我們使用這個(gè)標(biāo)題行數(shù)組的每一個(gè)元素對(duì)上面B列每一個(gè)數(shù)據(jù)得到來的兩個(gè)數(shù)組進(jìn)行條件求和,比如,對(duì)于”A:

我們計(jì)算B2中產(chǎn)品名稱 = "A"的所有數(shù)據(jù)之和。

由于SUMIF不能用于數(shù)組,所以我們改用SUMPRODUCT:

=SUMPRODUCT(--(titleC = "A"), dataC)

其中,titleC是正則函數(shù)得到的產(chǎn)品名稱數(shù)組,dataC是得到的數(shù)據(jù)數(shù)組。

我們就可以得到B列數(shù)據(jù)每一行對(duì)應(yīng)于標(biāo)題行數(shù)組中每一個(gè)元素的數(shù)據(jù)。

于是就得到了結(jié)果表。

實(shí)現(xiàn)

上面的過程顯然可以使用MAKEARRAY函數(shù)輕松實(shí)現(xiàn)。

下面是實(shí)現(xiàn)的公式:

=LET(    data, B2:B27,    title, {"A","B","C","D"},    VSTACK(title,        MAKEARRAY(ROWS(data), COLUMNS(title),            LAMBDA(r,c,                LET(                    name, INDEX(title, 1, c),                    dRow, INDEX(data, r, 1),                    titleC, REGEXEXTRACT(dRow,"([A-Z])",1),                    dataC, REGEXEXTRACT(dRow,"([0-9]+)",1),                    SUMPRODUCT(--(titleC = name), --dataC)                )            )        )    ))

其中第5~15行就是生成結(jié)果數(shù)據(jù)的實(shí)現(xiàn)過程。

在MAKEARRAY中,根據(jù)當(dāng)前的行,列(r,c),首先取出當(dāng)前的產(chǎn)品名稱(第8行),當(dāng)前的B列數(shù)據(jù)(第9行);

然后使用正則表達(dá)式取出B列數(shù)據(jù)中的產(chǎn)品名稱數(shù)組和數(shù)據(jù)數(shù)組(第10,11行);

第15行進(jìn)行條件求和。

提醒

由于正則函數(shù)剛推出不久,看起來AFE對(duì)它的支持不到位,所以上述公式如果寫在AFE中,保存時(shí)會(huì)提示有問題。

解決方案是將這個(gè)公式寫在公式編輯欄中。

當(dāng)然,可以在AFE中寫完(這里更方便編輯公式),但是不保存,而是復(fù)制到編輯欄中。

詳情咨詢客服(底部菜單-知識(shí)庫-客服)

Excel+Power Query+Power Pivot+Power BI


Power Excel 知識(shí)庫    按照以下方式進(jìn)入知識(shí)庫學(xué)習(xí)
Excel函數(shù)   底部菜單:知識(shí)庫->Excel函數(shù)

自定義函數(shù)  底部菜單:知識(shí)庫->自定義函數(shù)

Excel如何做  底部菜單:知識(shí)庫->Excel如何做

面授培訓(xùn)  底部菜單:培訓(xùn)學(xué)習(xí)->面授培訓(xùn)

Excel企業(yè)應(yīng)用  底部菜單:企業(yè)應(yīng)用

也可以在歷史文章中學(xué)習(xí)Excel,Power Query,Power Pivot,Power BI,Power Automate各種技巧。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章