type
status
date
slug
summary
tags
category
icon
password
是否阅读
是否阅读
Origin
URL

什么是文本透视?

把文本根据某个维度聚合后转置
大概就是下面这个效果(点开看动图)
notion image
是不是还蛮有用的?
在阅读下文之前,饼干建议你有一定的 VBA 基础
  • 知道【字典】是什么
  • 知道【二维数组】是什么
否则可能无法体会到下面的代码是如何把这两者融合来实现文本透视功能的

〇、解题思路

思路很简单,就三步
  1. 构造一个字典:红色箭头,确定在结果数组内的行号
  1. 构造当前列数组:蓝色箭头,确定在结果数组内的列号
  1. 将待透视的数据映射到结果数组:绿色箭头
notion image

一、声明变量

首先我们需要声明我们接下来需要用到的一些变量
  • 声明一个对象(之后可以绑定为字典)
  • 声明数据范围和数据数组
  • 声明结果范围和结果数组及最大行号和列号
  • 声明循环变量及当前行号和列号

二、变量赋值

第二步就是给部分变量赋【初值】
  • 通过后期绑定创建字典对象
  • 通过输入框获取数据范围和结果范围
  • 将数据范围的值赋给数据数组 (1 to n , 1 to 2)
  • 重声明结果数组为二维数组 (1 to n , 0 to n)
  • 重声明当前列数为一维数组 (1 to n)

三、主体循环

主体循环是一个遍历数据数组行数的 For 循环
在这个循环中包含了两部分

3.1 判断

这个判断的目的在于 获取当前行号
如果字典中存在当前值
  • 【当前行号】取字典的值
如果字典中不存在当前值
  • 新增【最大行号】为原【最大行号】+1
  • 【当前行号】为新增【最大行号】
  • 设置字典【当前值】的值为【当前行号】
  • 将【当前行】的第 1 列赋值到【结果数组】的【当前行号】行,第 0 列

3.2 映射

上一步已经取到了【当前行号】
现在只需要计算出【当前列号】
就能够把原始数据映射到【结果数组】中
  • 【当前列号数组】的第【当前行号】行,即【当前列号】 + 1
  • 将【当前行】的第 2 列赋值给【结果数组】的第【当前行号】行,第【当前列号】列
  • 冒泡法取【最大列号】

四、输出结果

主体循环结束后,【结果数组】就是我们想要的东西
  • 释放字典对象内存
  • 将【结果数组】的前【最大行号】行和【最大列号】列赋值给单元格

解锁环节

字典加数组的组合可以带来很大的想象空间
  • 233 赞
饼干将根据评论区的建议优化、增加该代码的功能
 
相关文章
PQ 教程_字段梳理 & 数据追加
Lazy loaded image
使用 Power Query 自定义生成日期表
Lazy loaded image
Dim_Data,你值得制作的第一张维度表
Lazy loaded image
数据汇总再不愁!傻瓜式数据汇总工具教学
Lazy loaded image
PQ 教程_文本处理的简单应用
Lazy loaded image
Power Query — 基础知识
Lazy loaded image
Power BI 入门篇 - 简单理解维度表Power Query — 菜单操作(1)
Loading...
木木
木木
木木不吃糖
最新发布
OneClickVirt | 一键虚拟化项目
2025-11-6
3 分钟搞定热点新闻 + 文案创作,飞书多维表格 + Coze,小白也能秒上手_飞书多维表格 热点采集 - CSDN 博客
2025-4-18
记一次使用大模型处理大量数据的过程
2025-4-14
VBA 实践 + 把大纲级别分明的 word 文档转换成横向从属结构 excel 表格
2025-1-8
用了这么多年的 Excel,你会筛选的反选功能吗?
2025-1-8
Power Query — 菜单操作(1)
2025-1-8
公告
🎉-- 感谢您的支持 ---🎉