你好,我是小必vba 將當(dāng)前日期轉(zhuǎn)化成數(shù)值,感謝與你在這里相遇。
我的第308篇原創(chuàng)Excel文章
今日內(nèi)容:使用Excel Power Query進(jìn)行數(shù)據(jù)的清洗與轉(zhuǎn)化
前幾天有個(gè)朋友問(wèn)了這樣一個(gè)問(wèn)題,是關(guān)于數(shù)據(jù)清洗與轉(zhuǎn)化的。
如下圖所示,是原有的數(shù)據(jù)結(jié)構(gòu),是非常地不合理與規(guī)范的數(shù)據(jù)結(jié)構(gòu):
需要將上面的數(shù)據(jù)整理成如下圖所示的規(guī)范的數(shù)據(jù):
對(duì)于上面的這個(gè)問(wèn)題,處理的首先的方法考慮Power Qeury或者VBA的方法,那么本節(jié)案例中將采用的是Excel中自帶的數(shù)據(jù)清洗功能Power Qeury.
主要思路:先添加一個(gè)自定列為當(dāng)前行,再將轉(zhuǎn)化成Table,然后兩兩拆分后進(jìn)行合并,轉(zhuǎn)化成結(jié)構(gòu)后再展開即可。
具體的操作步驟如下:
Step-01:先將原始數(shù)據(jù)加載至Power Query中,如圖所示:
Step-02:在Excel Power Query編輯器中使用Table.添加一個(gè)自定義列,引用到當(dāng)前的行再轉(zhuǎn)換成表,再使用Table.獲取數(shù)據(jù)源中的標(biāo)題行,然后使用List.獲取前6行即可。
Step-03:接著面的步驟,將上面的自定義中的每一個(gè)table里面的表降標(biāo)題處理。如下圖所示:
再將每一列轉(zhuǎn)化成一個(gè)List,可以使用Table.函數(shù)如下圖所示:
Step-04:使用List.Split函數(shù)將每?jī)蓚€(gè)List拆分為一個(gè)List,如下圖所示:
使用List.函數(shù)與List.函數(shù)將每個(gè)List中的兩個(gè)List的內(nèi)容進(jìn)行合并vba 將當(dāng)前日期轉(zhuǎn)化成數(shù)值,如圖所示:
Step-05:最后再次使用List.函數(shù)來(lái)構(gòu)造結(jié)構(gòu)用于展開。
Step-06:最后層層展開,刪除沒(méi)用的列即可。如圖所示:
最終的代碼如下圖所示:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
轉(zhuǎn)化 = Table.AddColumn(源,
"n",
each
List.Transform(
List.Transform(
List.Split(
Table.ToColumns(
Table.DemoteHeaders(
Table.RemoveColumns(
Table.FromRecords({_})
,List.FirstN(
Table.ColumnNames(源)
,6)
)
)
)
,2)
,List.Combine)
, each
[
次數(shù)=Text.Start(_{0},3),
日期=_{1},
類型=_{3}
]
)
),
展開 = Table.ExpandListColumn(轉(zhuǎn)化, "n"),
展開2 = Table.ExpandRecordColumn(展開, "n", {"次數(shù)", "日期", "類型"}),
刪除列 = Table.RemoveColumns(展開2,{"第一次異動(dòng)生效日", "第一次異動(dòng)情況", "第二次異動(dòng)生效日",
"第二次異動(dòng)情況", "第三次異動(dòng)生效日", "第三次異動(dòng)情況"}
)
in
刪除列
當(dāng)然還可以使用Table.Group函數(shù)進(jìn)行清理,具體代碼如下圖所示:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
分組轉(zhuǎn)化 = Table.Group(源,
List.FirstN(Table.ColumnNames(源),6),
{"n",
each List.Transform(
List.Transform(
List.Split(
Table.ToColumns(
Table.DemoteHeaders(
Table.RemoveColumns(_,
List.FirstN(
Table.ColumnNames(源)
,6)
)
)
)
,2),
List.Combine),
each
[
次數(shù)=Text.Start(_{0},3),
日期=_{1},
類型=_{3}
]
)
}
),
展開 = Table.ExpandListColumn(分組轉(zhuǎn)化, "n"),
展開2 = Table.ExpandRecordColumn(展開, "n", {"次數(shù)", "日期", "類型"})
in
展開2
第二種方法有興趣的小伙伴可以自行去練習(xí)一下。