[How To] AI 時代的 Excel 資料整理術:別再把原始資料直接餵給生成式 AI,用 Power Query、Codebook 與規格化提示打造可重複執行的自動化流程

生成式 AI 出現之後,很多人處理 Excel 的第一反應,就是把資料貼進對話框,要求 AI 直接幫忙整理、分類、統計,甚至輸出報表。但如果你真的需要的是一套可重複、可維護、可驗證的資料流程,那麼更好的做法不是把原始資料交給 AI,而是把初始 M 語法、欄位規格、處理需求與輸出格式交給 AI,讓它協助你產生可直接貼進 Power Query 的語法。

這篇文章會用一組仿真去識別化的藥品許可證資料,完整示範如何從 Excel 載入資料、調整欄位屬性、建立 Codebook、撰寫給生成式 AI 的四段式需求、驗證 Power Query 結果,並逐步優化成一套可以長期重複使用的工作流。對經常處理藥證、產品、供應商、主成分、劑型或許可證資料的人來說,這套方法通常比直接把 Excel 丟給 AI 更穩、更安全,也更有效率。

這篇文章的核心不是「怎麼把 Excel 餵給 AI」,而是「怎麼把資料規格講清楚,讓 AI 幫你寫出能在 Power Query 穩定執行的流程」。

這篇文章適合誰? 如果你已經在用 Excel、正在學 Power Query,或經常需要反覆整理格式固定但欄位複雜的資料,這篇會比單純的「AI 幫我整理一下」更有長期價值。

為什麼不要直接把 Excel 資料丟給生成式 AI

很多人對生成式 AI 的期待,建立在一種很自然的想像上:既然 AI 會寫程式、會整理文字、會分析資料,那我是不是只要把 Excel 貼進去,它就能直接幫我整理完?問題在於,資料整理真正困難的地方,通常不是看懂資料,而是理解規則。

同樣一個欄位,有時候看起來是文字,其實是代碼,不能轉成數值;有時候看起來是一串成分名稱,實際上卻是多值欄位,需要依分隔符號拆開、去空白、排序、去重複,再重新串回;有時候公司名稱看似可以直接分組,但同一家公司在不同資料來源中可能有不同寫法;有時候某個欄位明明叫品名,卻根本不能拿來當唯一鍵。這些事情 AI 不是做不到,而是如果你沒有先把規則講清楚,它很容易用「看起來合理」但不符合你需求的方式處理。

更現實的問題是資料安全。很多工作資料不適合直接貼進外部工具,尤其當資料涉及許可證、產品代碼、供應商名單、內部公司資料或尚未公開的營運資訊時,把整份原始資料直接餵給 AI,風險通常比想像中高。你真正需要的,往往不是讓 AI 看見全部明細,而是讓它理解你的資料長什麼樣、有哪些欄位、欄位規則是什麼、你想做什麼轉換。

最後,是可維護性。今天你把資料貼給 AI,AI 幫你整理出一個結果;下次資料更新時,你通常又要重新貼一次、重新講一次、重新檢查一次。這不是自動化,而比較像把手工整理的一部分外包給 AI。真正有價值的做法,是把規則固定下來,做成 Power Query 查詢,之後資料一更新,只要重新整理即可。

更聰明的做法:把 AI 當成規格翻譯器

這篇文章最核心的觀點很簡單:不要把 AI 當成資料倉庫,要把它當成規格翻譯器。

你真正要交給 AI 的,不是整份原始資料,而是四種資訊:第一,你目前的初始 M 語法;第二,欄位規格;第三,你想做的處理需求;第四,你希望得到的輸出格式。AI 根據這些資訊,幫你寫出可直接貼進 Power Query 進階編輯器的語法,最後由 Excel 在你自己的環境裡執行。

這種分工看起來比較麻煩,但實際上更強。因為一旦你建立了這套工作流,之後很多資料整理任務都會變得非常穩定。你不必每次都重貼原始資料,不必每次都從頭解釋一次,也不必把資料安全與結果可追溯性交給運氣。你做的是把需求結構化,而不是把資料暴露出去。

實戰案例:仿真去識別化的藥品許可證資料

為了讓這篇文章不只停留在概念層次,下面直接用一組仿真去識別化的藥品許可證資料來示範。這份資料保留藥證資料的欄位結構與整理難點,同時對許可證字號、產品名稱、公司名稱與製造商名稱進行仿真匿名化處理。它看起來像真實資料,但不能回推出原始主體,適合拿來做 Excel、Power Query 與 AI 協作教學。

你可以先在 Excel 建立一張工作表,命名為 匿名藥證資料。考量手機版閱讀與首屏效能,本文只展示節錄資料;實際練習時可自行擴充列數。

匿名藥證資料節錄
許可證字號 中文品名 劑型 主成分略述 申請商名稱 製造廠國別
教藥製字第M000101號 霽寧胃舒錠 錠劑 SODIUM BICARBONATE;;MAGNESIUM OXIDE;;DIASTASE 霽川製藥工業股份有限公司 TW
教藥製字第M000118號 嵐清利敏液 內服液劑 CHLORPHENIRAMINE MALEATE;;DL-METHYLEPHEDRINE HCL;;AMMONIUM CHLORIDE 嵐汐藥品股份有限公司 TW
教藥製字第M000173號 曜舒感冒糖衣錠 糖衣錠 ACETAMINOPHEN;;ETHENZAMIDE;;CAFFEINE ANHYDROUS;;DL-METHYLEPHEDRINE HCL;;CHLORPHENIRAMINE MALEATE 曜安化學製藥股份有限公司 TW
教藥製字第M000244號 泓澤舒咳膠囊 膠囊劑 GUAIACOL GLYCERYL ETHER (EQ TO GUAIFENESIN);;NOSCAPINE HCL;;DL-METHYLEPHEDRINE HCL 泓澤藥品工業股份有限公司 TW
教藥製字第M000344號 霽寧胃舒錠 加強版 錠劑 SODIUM BICARBONATE;;MAGNESIUM OXIDE;;DIASTASE;;SIMETHICONE 霽川製藥工業股份有限公司 TW
教藥製字第M000388號 嵐清日舒錠 錠劑 ACETAMINOPHEN;;CHLORPHENIRAMINE MALEATE;;CAFFEINE ANHYDROUS 嵐汐藥品股份有限公司 TW

這組資料很適合拿來練習幾件事:主成分略述 是典型多值欄位,適合示範拆分、排序、去重複、重組;申請商名稱 會重複,適合做公司分組統計;中文品名 有相近名稱,但不適合直接當唯一鍵,這能幫助讀者理解為什麼資料整理不能只看表面欄位名稱。

第一步:先載入 Power Query,做好欄位屬性調整

很多人一拿到資料就急著貼進 AI,其實最好的第一步是自己先做基礎清理,也就是把資料載入 Power Query,確認欄位型別與基本屬性。這不只是為了整理資料,也是為了讓後續 AI 能理解你的起始點。

在 Excel 中把資料整理成表格後,點選「資料」→「從表格/範圍」,將資料載入 Power Query。進入查詢編輯器後,先做最基本的欄位型別設定。這一步很重要,因為你後面貼給 AI 的不是一張截圖,而是一段初始 M 語法。

欄位屬性調整時要注意什麼

許可證字號 必須明確設成文字,因為它屬於代碼欄位,不是數值。主成分略述 也應設為文字,因為它本質上是一個多值字串欄位。製造廠國別 雖然只有兩碼,但同樣應設為文字而非數值。這種型別設定看起來只是前置作業,但實際上會直接影響後續 AI 產出的語法品質。

初始 M 語法

let
    來源 = Excel.CurrentWorkbook(){[Name="匿名藥證資料"]}[Content],
    已變更類型 = Table.TransformColumnTypes(
        來源,
        {
            {"許可證字號", type text},
            {"中文品名", type text},
            {"英文品名", type text},
            {"適應症", type text},
            {"劑型", type text},
            {"主成分略述", type text},
            {"申請商名稱", type text},
            {"製造商名稱", type text},
            {"製造廠國別", type text}
        }
    )
in
    已變更類型

第二步:先建立最小可用的 Codebook

與其給 AI 一堆資料樣本,不如先給它一份欄位規格表。這份欄位規格表通常會被叫做 Codebook、譯碼簿或資料字典。它的目的不是描述每一筆資料,而是描述每一個欄位。也就是說,你要告訴 AI 的不是某幾列資料長什麼樣,而是每個欄位應該怎麼被理解、怎麼被處理。

Codebook 欄位規格表
欄位名稱 資料型別 是否可空白 格式規則 分隔符號 業務規則
許可證字號 text 固定前綴 + 代碼 不可轉數值,不建議拆掉前綴
中文品名 text 不固定 不建議當唯一鍵
劑型 text 分類值 可作分組與標準化
主成分略述 text 多值字串 ;; 拆分後需去空白、排序、去重複,再串回
申請商名稱 text 不固定 可作公司分組統計
製造廠國別 text 兩碼國別 可作國別分類

這張表看起來很簡單,但它往往比貼十列樣本更有價值。因為樣本只能讓 AI 猜規則,Codebook 則是直接把規則講明。

第三步:怎麼把需求講給生成式 AI

很多人對 AI 的提問還停留在一句話,例如「幫我整理這份資料」或「請幫我寫 Power Query」。這種問法不是完全不能用,但通常不夠精準。你真正需要的,是把需求拆成固定結構,讓 AI 有足夠資訊產出可直接執行的語法。

我建議至少分成四段:第一段是目前的初始 M 語法;第二段是欄位規格;第三段是處理需求;第四段是輸出需求。

可直接貼給生成式 AI 的四段式提示詞

第一段:目前初始 M 語法
let
    來源 = Excel.CurrentWorkbook(){[Name="匿名藥證資料"]}[Content],
    已變更類型 = Table.TransformColumnTypes(
        來源,
        {
            {"許可證字號", type text},
            {"中文品名", type text},
            {"英文品名", type text},
            {"適應症", type text},
            {"劑型", type text},
            {"主成分略述", type text},
            {"申請商名稱", type text},
            {"製造商名稱", type text},
            {"製造廠國別", type text}
        }
    )
in
    已變更類型

第二段:欄位規格
- 許可證字號:文字欄位,不可轉成數值,保留完整字串
- 中文品名:文字欄位,不建議當唯一鍵
- 劑型:文字欄位,可作分組
- 主成分略述:多值欄位,以 ;; 分隔,拆分後需 Trim、排序、去重複,再用 ;; 串接回來
- 申請商名稱:文字欄位,可用來分組統計
- 製造廠國別:兩碼國別代碼

第三段:處理需求
1. 清理主成分略述欄位:依 ;; 拆分、去除前後空白、排序、去重複,再重新用 ;; 串接
2. 新增一欄「主成分數量」,計算主成分略述拆分後有幾個成分
3. 新增一欄「同申請商許可證張數」,依申請商名稱統計同公司共有幾張許可證
4. 依劑型分組後,新增一欄「劑型筆數」
5. 最後保留原始資料列,不要先彙總成單一列

第四段:輸出需求
- 請直接產出可貼進 Power Query 進階編輯器的完整 M 語法
- 請保留以下欄位順序:
  許可證字號、中文品名、劑型、主成分略述、主成分數量、申請商名稱、同申請商許可證張數、製造商名稱、製造廠國別、劑型筆數
- 若有需要,請加入中繼步驟名稱,方便後續除錯

第四步:拿到語法後,怎麼驗證結果

就算 AI 產出的 Power Query 語法可以執行,也不代表它一定正確。資料整理的專業,不在於讓語法跑起來,而在於確認它是不是照著你的規則跑。

我建議至少驗證三件事。第一,主成分略述 是否真的被標準化,例如是否已去除空白、排序一致、去除重複。第二,統計欄位是否正確 merge 回原始表,而不是只停留在分組表。第三,欄位型別是否仍維持正確,尤其是代碼欄與數量欄。

第五步:第一次做不好,怎麼優化流程

第一次拿到 AI 產生的語法,如果結果不夠好,很多人會直接重問一次。這種做法不是不能用,但效率很低,而且容易讓問題越滾越大。更好的做法,是像在和工程師協作一樣,針對特定問題補規格。

補規格的範例寫法

請保留你上一版的整體結構,但修正以下三點:
1. 主成分略述重組前,請先移除空白字串,再按字母排序
2. 主成分數量只計算非空白成分,不計入 null 或空字串
3. 劑型筆數請 merge 回原始資料表,讓每一列都可看到對應劑型的總筆數
其他欄位與順序維持不變,請重新提供完整 M 語法

這種方式通常比從頭再貼一次完整需求更有效,因為 AI 已經有前一版上下文,你只是在做更精準的修正。

第六步:把一次性操作變成可重複使用的工作流

如果你只是偶爾整理一張表,做到前面這裡已經夠用了。但如果你真正想提升資料整理能力,下一步應該是把這套流程固定下來,變成可反覆使用的工作流。

最基本的做法,是固定保留這幾樣東西:原始資料查詢、Codebook、主要清理查詢,以及輸出查詢。原始資料查詢負責把 Excel 資料讀進來並設定基本型別;Codebook 負責記錄欄位名稱、型別、是否可空白、分隔符號、唯一性與業務規則;主要清理查詢負責主成分拆分、排序、去重複、重新串接、統計與分組;輸出查詢則提供報表或後續分析使用。

實際可貼上的 Power Query 範例語法

下面這一段可以直接貼進 Power Query 進階編輯器。它會讀取 匿名藥證資料,清理 主成分略述 欄位,依 ;; 拆分、移除空白、排序、去重複、重組;之後計算主成分數量、依申請商統計許可證張數、依劑型統計筆數,最後再把統計結果合併回原始資料表。

let
    來源 = Excel.CurrentWorkbook(){[Name="匿名藥證資料"]}[Content],
    已變更類型 = Table.TransformColumnTypes(
        來源,
        {
            {"許可證字號", type text},
            {"中文品名", type text},
            {"英文品名", type text},
            {"適應症", type text},
            {"劑型", type text},
            {"主成分略述", type text},
            {"申請商名稱", type text},
            {"製造商名稱", type text},
            {"製造廠國別", type text}
        }
    ),

    清理主成分 = Table.AddColumn(
        已變更類型,
        "主成分清單",
        each
            let
                原始值 = [主成分略述],
                拆分清單 = if 原始值 = null or Text.Trim(原始值) = "" then {} else Text.Split(原始值, ";;"),
                去空白 = List.Transform(拆分清單, each Text.Trim(_)),
                去除空字串 = List.Select(去空白, each _ <> ""),
                去重複 = List.Distinct(去除空字串),
                排序後 = List.Sort(去重複, Order.Ascending)
            in
                排序後,
        type list
    ),

    重組主成分 = Table.AddColumn(
        清理主成分,
        "主成分標準化",
        each Text.Combine([主成分清單], ";;"),
        type text
    ),

    計算主成分數量 = Table.AddColumn(
        重組主成分,
        "主成分數量",
        each List.Count([主成分清單]),
        Int64.Type
    ),

    申請商統計表 = Table.Group(
        計算主成分數量,
        {"申請商名稱"},
        {{"同申請商許可證張數", each Table.RowCount(_), Int64.Type}}
    ),

    劑型統計表 = Table.Group(
        計算主成分數量,
        {"劑型"},
        {{"劑型筆數", each Table.RowCount(_), Int64.Type}}
    ),

    合併申請商統計 = Table.NestedJoin(
        計算主成分數量,
        {"申請商名稱"},
        申請商統計表,
        {"申請商名稱"},
        "申請商統計",
        JoinKind.LeftOuter
    ),

    展開申請商統計 = Table.ExpandTableColumn(
        合併申請商統計,
        "申請商統計",
        {"同申請商許可證張數"},
        {"同申請商許可證張數"}
    ),

    合併劑型統計 = Table.NestedJoin(
        展開申請商統計,
        {"劑型"},
        劑型統計表,
        {"劑型"},
        "劑型統計",
        JoinKind.LeftOuter
    ),

    展開劑型統計 = Table.ExpandTableColumn(
        合併劑型統計,
        "劑型統計",
        {"劑型筆數"},
        {"劑型筆數"}
    ),

    移除中繼欄位 = Table.RemoveColumns(
        展開劑型統計,
        {"主成分清單", "主成分略述"}
    ),

    重新命名欄位 = Table.RenameColumns(
        移除中繼欄位,
        {
            {"主成分標準化", "主成分略述"}
        }
    ),

    重新排序欄位 = Table.ReorderColumns(
        重新命名欄位,
        {
            "許可證字號",
            "中文品名",
            "英文品名",
            "適應症",
            "劑型",
            "主成分略述",
            "主成分數量",
            "申請商名稱",
            "同申請商許可證張數",
            "製造商名稱",
            "製造廠國別",
            "劑型筆數"
        }
    )
in
    重新排序欄位

一份真正實用的 AI 協作模板

如果你想把這套流程變成日常習慣,可以把下面這個模板存起來。之後每次要請 AI 幫你寫 Power Query,就直接照這個格式填空。

我現在要處理 Excel / Power Query 資料,請根據我提供的初始 M 語法、欄位規格、處理需求與輸出需求,直接產出可貼進 Power Query 進階編輯器的完整 M 語法。

【一、初始 M 語法】
(貼上目前進階編輯器內容)

【二、欄位規格】
- 欄位A:型別、是否可空白、格式規則、是否唯一、特殊說明
- 欄位B:型別、分隔符號、是否多值、處理方式
- 欄位C:...

【三、處理需求】
1. 要做哪些清理
2. 要做哪些分組或統計
3. 要不要保留原始資料列
4. 哪些欄位要新增
5. 哪些欄位要重新命名

【四、輸出需求】
- 最後保留哪些欄位
- 欄位順序
- 是否要拆成中繼查詢
- 是否要保留除錯用步驟名稱

常見問題

沒有原始資料,也能請 AI 幫我寫 Power Query 嗎?

可以,但前提是你要提供足夠清楚的規格,至少包含初始 M 語法、欄位型別、分隔符號、處理需求與輸出要求。對 AI 來說,規格通常比少量樣本更重要。

為什麼一定要先做欄位屬性調整?

因為型別會直接影響後續邏輯。像許可證字號這類代碼欄若沒先設定為文字,後續就可能在比對、排序或合併時出問題。

這種做法和直接把 Excel 貼給 AI,差別在哪裡?

差別在於可維護性與可重複性。直接貼資料通常只會得到一次性答案;把規格講清楚並寫成 Power Query 查詢,才會得到可重複執行、可驗證、可持續優化的流程。

結語:不要把資料交給 AI,要把規格交給 AI

如果你讀到這裡,只想帶走一句話,那就是:不要把資料交給 AI,要把規格交給 AI。

當你開始這樣做之後,生成式 AI 在資料整理中的角色會完全改變。它不再只是聊天工具,也不只是一次性的代工助手,而會變成你在 Excel 與 Power Query 工作流中的協作夥伴。你負責定義欄位、規則與輸出,AI 幫你把這些需求翻成 M 語法,Power Query 則負責在你的本地環境中穩定執行。

如果你真的想在 AI 時代提升資料整理能力,最值得投資的第一步,不是學會更多花式提示詞,而是現在就開始做兩件事:第一,為你常用的資料建立一份簡單的 Codebook;第二,把你每次的整理需求寫成可以交給 AI 的四段式規格。只要你開始這樣做,很快就會發現,你不只是學會了一種問 AI 的方法,而是真正建立了一套可複用、可維護、可擴充的資料整理系統。

讀者留言

捲動到此處時自動載入留言…