1. 程式人生 > >Excel實戰:時間轉換、字串拆分和多條件判斷

Excel實戰:時間轉換、字串拆分和多條件判斷

1 概述

1.1案例
有如下通話記錄資料,包括主叫、被叫和通話時長。

+----------+------------------+------------------+----------+
| date     | caller           | callee           | duration |
+----------+------------------+------------------+----------+
| 20170820 | +12086828321     | +919500953657    |        0 |
| 20170820 | +12086828321     | +919500953657    |        0 |
| 20170819 | +12094106177 | +12462493750 | 967 | | 20170819 | +12135364952 | +12462493750 | 967 | | 20170819 | +12139082474 | +12462493750 | 967 | | 20170819 | +12192022323 | +12462493531 | 0 | | 20170819 | +12192022323 | +12462493531 | 0 | | 20170819 | +12192022323 | +12462493531 | 0 |
| 20170819 | +12192022323 | +12462493531 | 0 | | 20170819 | +12192022323 | +12462493531 | 0 | | 20170819 | +12192022323 | +12462493531 | 0 | | 20170819 | +12192022323 | +12462493531 | 0 | ··· ··· ··· ··· | 20170918 | +971569515973 | +8801866849184 | 0 |
| 20170918 | +971569515973 | +8801866849184 | 0 | | 20170918 | +971569515973 | +8801874247298 | 0 | | 20170918 | +971569515973 | +8801874247298 | 300 | | 20170918 | +971569515973 | +8801882829872 | 0 | | 20170918 | +971582051122 | +971564146669 | 0 | | 20170918 | +971582902340 | +971505708937 | 17 | +----------+------------------+------------------+----------+

其中,電話號碼包含國家碼字首,通話時長為0表示沒有接通。
1.2 任務
需要統計使用者撥打本地電話數、撥打國外電話數,撥通本地電話數,撥通國外電話數,並且以周為單位進行彙總。

1.3 分析

  • 已有主叫和被叫電話,可以通過判斷電話號碼的國家碼字首是否相同來判斷是否本國電話;
  • 已有通話時長,通過通話時長是否大於0來判斷是否接通;
  • 已有時間,可以通過時間進行 分類彙總;

1.4 函式
需要用到的函式:
1. date函式,用於將數字或字串轉化成時間格式;
2. Mid函式,從文字字串中制定的起始位置返回特定場長度的字元;
3. if函式,用於條件判斷;
4. and函式,組合多個條件;

2 實戰

2.1 將資料放入Excel表格中

這裡寫圖片描述

2.2 將數字形式的時間轉化成標準時間格式

這裡寫圖片描述
在B列前面新建一列A,並輸入圖中公式,確認後往下拉。
說明:

  • =mid(text,start_num,num_chars),返回某一部分的字串;比如mid(b2,1,4)表示返回b2中前4位多的數字;
  • =date(year,month,day),返回Excel時間格式;

2.3 判斷電話號碼字首是否相同,是則返回1,否則返回0

新建一列F,在f2中輸入=IF(MID(C2,1,2)=MID(D2,1,2),1,0)
這裡寫圖片描述
函式說明:

  • if(logical_test,value1_true,value2_false),如果條件成立,返回value1,如果條件不成立則返回value2。

這裡截取了主叫和被叫的前兩位進行比較,如果相同,那麼返回1,如果不同就返回0;

同樣的道理,我們也可以在後面增加一列,判斷下相同則返回0,不同返回1。
這裡寫圖片描述

2.4 判斷是否撥通

這個比較簡單,簡單的條件判斷函式if就可以實現,=IF(E2>0,1,0),完成後下拉,如圖所示:
這裡寫圖片描述

到了這一步,就已經分離出了本地撥打,國際電話撥打,以及是否接通,接下來將這三個因素組合一下,就可以得到,接通的本地撥打和國際撥打數;

2.5 接通的本地撥打和國際撥打

還是使用if函式,只是在邏輯條件中增加and(logical1,logical2)函式來增加與條件,

這裡寫圖片描述

同樣的道理,完成後下拉,得打撥通的本地撥打數。

同樣使用公式=IF(AND(G2=1,H2=1),1,0),得到撥通的國家電話撥打數。

到這一步,就已經完成了基本的資料處理工作,接下來,使用資料透視表進行分類彙總和結果呈現。

2.6 透視表分類彙總

  • 透視表
    選中所有資料,選擇“插入-資料透視表”,將時間作為列,剛剛通過公式得到的本地撥打數same,國際電話撥打數diff,撥通的本地撥打數same_dur,撥通的國際電話數diff_dur放在行,選擇求和彙總:

透視表

這個時候,列是以每一天進行彙總的,而我們需要的資料是以周進行彙總,網上有大量各種辦法,增加列,以星期作為選項,我覺得最簡單的辦法就是分類彙總。

  • 分類彙總
    在透視表時間資料“右鍵-建立組”,步長選擇“日”,天數選擇7天,然後點選“確定”。

分類彙總

到這一步,我們就已經剝離出了任務所需的撥打國內電話數,撥打國際電話數,撥通的國內電話數和撥通的國際電話數。

總結

主要應用了三個函式,mid函式提取字串中指定幾位字元,if函式判斷條件並返回相應的值,date函式進行格式的轉換,邏輯非常簡單,實現非常容易。