持续学习,共同成长
🔍 Excel中的M语言藏在哪里?
想象一下,Excel里住着两位"编程小伙伴":
找到M语言编辑器的步骤:
点击Excel的 "数据" 选项卡
找到 "获取和转换数据" 区域
从任何数据源导入数据(比如"从表格")
Power Query编辑器弹出后 → 点击 "高级编辑器" 按钮
温馨提示:如果你的Excel没有Power Query,可能需要Office 365或Excel 2016以上版本哦!
⚔️ M语言 vs VBA:新一代与老前辈的较量
打个比方:
📦 M语言的基本结构:一个神奇的"三步魔法"
M语言的核心结构简单到令人发指,就三步:
let // 第一步:准备材料(定义变量) 鸡蛋 = 2, 面粉 = 200, 糖 = 50, // 第二步:加工处理(数据转换) 面糊 = 鸡蛋 + 面粉 + 糖, 蛋糕 = 面糊 * "烘烤魔法"in // 第三步:上菜!(返回结果) 蛋糕
更接地气的例子:计算奶茶订单
假设你在奶茶店打工,要算订单总价:
let // 1. 定义原始数据 珍珠奶茶单价 = 15, 布丁奶茶单价 = 18, 珍珠奶茶数量 = 3, 布丁奶茶数量 = 2, // 2. 开始计算 珍珠奶茶小计 = 珍珠奶茶单价 * 珍珠奶茶数量, // 45元 布丁奶茶小计 = 布丁奶茶单价 * 布丁奶茶数量, // 36元 订单总价 = 珍珠奶茶小计 + 布丁奶茶小计 // 81元in // 3. 告诉收银员结果 订单总价
你看懂了吗?
let 后面:列出所有需要的东西
in 前面:对这些东西进行加工
in 后面:拿出最终成品
点击完成试试看,结果为81,手动算算结果是不是就该是81呢?
🎯 真实Excel场景:从零写一个M查询
场景:统计销售奖金
假设你是销售经理,要计算团队奖金:
基本奖金:销售额的5%
超额奖励:超过1万的部分再加2%
在Excel中实际操作:
新建查询:
let 销售额 = 12500, // 张三的销售额 基本奖金 = 销售额 * 0.05, 超额部分 = if 销售额 > 10000 then 销售额 - 10000 else 0, 超额奖金 = 超额部分 * 0.02, 总奖金 = 基本奖金 + 超额奖金in 总奖金
看下结果
更实用的表格处理:
通过以上的案例我们了解了M语言的基本的结构,显示中我们的数据大多来源于表格,那我们如何通过M代码创建一个表并按上述规则计算出奖金结果呢?
let // 1. 创建销售表格 销售数据 = #table( {"销售员", "销售额"}, { {"张三", 12500}, {"李四", 8900}, {"王五", 15000} } ), // 2. 添加计算列 添加基本奖金 = Table.AddColumn(销售数据, "基本奖金", each [销售额] * 0.05), 添加超额部分 = Table.AddColumn(添加基本奖金, "超额部分", each if [销售额] > 10000 then [销售额] - 10000 else 0), 添加超额奖金 = Table.AddColumn(添加超额部分, "超额奖金", each [超额部分] * 0.02), 添加总奖金 = Table.AddColumn(添加超额奖金, "总奖金", each [基本奖金] + [超额奖金]), // 3. 清理中间列(可选) 最终结果 = Table.SelectColumns(添加总奖金, {"销售员", "销售额", "总奖金"})in 最终结果
看下结果:
通过点击右边的查询设置可以看到每一步对应的代码:
这节课我们只感受M代码的结构,下节课解释下这个代码的具体意思,不用着急,一步步学习。
🚀 为什么M语言这么友好?
对比VBA的相同功能:
VBA版本(大概需要20行):
Sub 计算奖金() Dim 销售额 As Double Dim 基本奖金 As Double '...一堆声明和循环...End Sub
M语言版本(上面已经看到了,更简洁)
M语言的"懒人福利":
不用声明类型:销售额 = 12500 就行,不用管是整数还是小数
一步到位:不像VBA要写完整的Sub...End Sub
所见即所得:每一步都能在预览窗口看到结果
不怕报错:写错了会有明确提示,不会让Excel崩溃
💡 新手快速上手技巧
练习1:试试这个"买菜计算器"
let 白菜单价 = 3.5, 土豆单价 = 2.8, 白菜重量 = 1.5, // 斤 土豆重量 = 2.0, 白菜价格 = 白菜单价 * 白菜重量, 土豆价格 = 土豆单价 * 土豆重量, 总价 = 白菜价格 + 土豆价格, 抹零后 = Number.Round(总价, 0) // 四舍五入到整数in "总共:" & Text.From(总价) & "元,抹零后" & Text.From(抹零后) & "元"
练习2:进阶挑战 - 判断成绩等级
let 分数 = 85, 等级 = if 分数 >= 90 then "优秀" else if 分数 >= 80 then "良好" else if 分数 >= 60 then "及格" else "不及格", 评语 = 分数 & "分,等级为:" & 等级in 评语
📚 下一步学习建议
先在高级编辑器里玩:修改数字,看看结果怎么变
从界面操作开始:在Power Query界面点按钮,然后看生成的M代码
记住核心公式:let ... in ... 就是全部
别怕报错:M语言的错误提示比VBA友好多了!
🎉 总结一下
M语言就像做菜:
let = 准备食材
中间步骤 = 切菜、炒菜
in = 装盘上菜
相比VBA这位"严肃的老管家",M语言更像是个"贴心小助手":
它只专心做好一件事:处理数据
语法简单到像在写购物清单
在Excel的数据菜单里就能找到
现在就去Excel里试试吧! 打开"从表格",随便选个区域,点击"高级编辑器",开始你的第一个M语言之旅!
记住:学M语言不是为了成为程序员,而是为了让Excel数据清洗不再痛苦!😊
本节课练习文件下载链接:
链接:https://pan.quark.cn/s/3378a70e797b