今天遇到一个比较有意思的求助:公司本轮推广活动中有好几个 SKU,如何列出这些 SKU 的所有排列组合?
刚开始我也想了一会,但是当我开始列出排列组合的时候,那一堆 0101 让我豁然开朗,哈哈,这不就是二进制吗?大学一开始就讲的底层知识。
案例:
下图 1 是本次促销的几个 SKU,请列出所有可能的购买组合。
效果如下图 2 所示。
解决方案:
1. 复制 A2:A6 区域 --> 选中 C1 单元格
2. 选择菜单栏的“开始”-->“粘贴”-->“选择性粘贴”
3. 在弹出的对话框中勾选“转置”--> 点击“确定”
如果纯人工排列组合的话,可以这样标识:在卖出的 SKU 下方写 1,没有卖出的写 0。
为啥我觉得很眼熟?这不就是二进制数据的表达方式吗?
想穿了这层,接下来的一切就变得很容易了。我列一个二进制顺序列,然后再将其中的 1 替换为 SKU 的名称不就好了吗?
4. 在 H2 单元格内输入以下公式 --> 下拉直至单元格结果为 1111 为止:
=DEC2BIN(ROW(A1))
公式释义:
DEC2BIN 函数的作用是将十进制转换为二进制;
ROW(A1):提取 A1 单元格的行号,随着公式下拉,行号会以步长为 1 顺序递增,也就是产生一列十进制顺序序列
有关 DEC2BIN 函数的详解,请参阅Excel – 一大波进制转换函数来袭,二、八、十、十六进制互转。
5. 选中 H 列数据表的任意单元格 --> 选择菜单栏的“数据”-->“从表格”
6. 在弹出的对话框中点击“确定”
数据表已上传至 Power Query。
7. 选择菜单栏的“添加列”-->“自定义列”
8. 在弹出的对话框的“自定义列公式”区域输入以下公式 --> 点击“确定”:
=Text.PadStart(Text.From([二进制]),4,"0")
Text.PadStart 的作用是在单元格内容的前面补位;
参数“4”表示不足 4 位补足 4 位,"0" 表示用 0 补位。
9. 选中“自定义”列 --> 选择菜单栏的“主页”-->“拆分列”-->“按字符数”
10. 在弹出的对话框中按以下方式设置 --> 点击“确定”:
字符数:输入“1”
拆分:选择“重复”
11. 将第一列删除
12. 选中所有列 --> 选择菜单栏的“主页”--> 将数据类型改为“文本”
13. 选中“自定义.1”列 --> 选择菜单栏的“主页”-->“替换值”
14. 在弹出的对话框中按以下方式设置 --> 点击“确定”:
要查找的值:输入“1”
替换为:输入“鼠标”
15. 用同样的方式将其他列的 1 值分别替换为“键盘”、“显示器”、“音响”
16. 选中所有列 --> 将“0”替换为空值
17. 保持选中所有列 --> 选择菜单栏的“转换”-->“合并列”
18. 在弹出的对话框中按以下方式设置 --> 点击“确定”:
分隔符:选择“空格”
新列名:输入所需的列名
19. 选择菜单栏的“转换”-->“格式”-->“修复”
20. 选择菜单栏的“主页”-->“关闭并上载”-->“关闭并上载至”
21. 在弹出的对话框中选择“现有工作表”及需要上传到的位置 --> 点击“加载”
所有的排列组合都上传到 J 列的表中了。
Excel学习世界
转发、在看也是爱!