VBA一维表转二维表
时间:2022-07-22
本文章向大家介绍VBA一维表转二维表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前面说过了二维表转一维表,现在来看看一维表转二维表。
1、需求:
将1个一维表格转换为二维表格:
2、实现方法:
- 数据透视表
要实现这个方法,其实熟练数据透视表的处理起来是非常的简单的:
- SQL语句
会SQL语句的处理起来也很简单,只要明白SQL语句就可以:
transform sum(数据) select 项目 from [Sheet1$] group by 项目 pivot 姓名
- VBA代码实现
使用VBA代码来实现自然也是没有问题的,使用字典来分别记录行和列的序号,然后输出到1个二维数组就可以:
Sub TarnsTable2()
Dim drow As Object
Dim dcol As Object
Set drow = VBA.CreateObject("Scripting.Dictionary")
Set dcol = VBA.CreateObject("Scripting.Dictionary")
Dim i As Long
Dim arr() As Variant
Dim i_row As Long
ActiveSheet.AutoFilterMode = False
i_row = Cells(Cells.Rows.Count, 1).End(xlUp).Row
arr = Range("A1").Resize(i_row, 3).Value
'记录项目的行号、姓名的列号
Dim strkey As String
For i = 2 To i_row
strkey = VBA.CStr(arr(i, 1))
If Not drow.Exists(strkey) Then drow(strkey) = drow.Count + 1
strkey = VBA.CStr(arr(i, 2))
If Not dcol.Exists(strkey) Then dcol(strkey) = dcol.Count + 1
Next
Dim result() As Variant
ReDim result(1 To drow.Count + 1, 1 To dcol.Count + 1) As Variant
result(1, 1) = "项目"
Dim tmp
tmp = drow.keys()
'行
For i = 0 To drow.Count - 1
result(i + 2, 1) = tmp(i)
Next
tmp = dcol.keys()
'列
For i = 0 To dcol.Count - 1
result(1, i + 2) = tmp(i)
Next
Dim prow As Long, pcol As Long
'数据
For i = 2 To i_row
prow = drow(VBA.CStr(arr(i, 1))) + 1
pcol = dcol(VBA.CStr(arr(i, 2))) + 1
result(prow, pcol) = result(prow, pcol) + VBA.Val(arr(i, 3))
Next
Range("E1").Resize(drow.Count + 1, dcol.Count + 1).Value = result
Set drow = Nothing
Set dcol = Nothing
End Sub
- HDUOJ---Hamming Distance(4712)
- HDUOJ-----Difference Between Primes
- HDUOJ----(4706)Children's Day
- poj-------Common Subsequence(poj 1458)
- poj----Maximum sum(poj 2479)
- HDUOJ---hello Kiki
- HDUOJ-----X问题
- POJ-----C Looooops
- POJ--Strange Way to Express Integers
- HDUOJ----More is better(并查集)
- HDUOJ 1099——Lottery
- HDUOJ-----取(m堆)石子游戏
- HDUOJ-----Be the Winner
- HDUOJ-------- Fibonacci again and again
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 元素滚动 scroll 系列
- Java基础系列之fastjson parse多级json数据
- Linux系列之下载安装jdk-8u261-linux-i586.tar.gz
- 常见网页特效案例
- MySQL系列之体系结构原理学习笔记
- 触屏事件
- 10.2【前端开发】图片文件格式:常见的图片格式对比有何优劣以及如何使用Google的webp格式?
- uni-app 与 Vue H5 项目通讯
- Gridview][UpdateCommand的写法要点]
- MySQL系列之事务日志Undo log学习笔记
- click 延时解决方案
- Splash抓取javaScript动态渲染页面
- Sentence-Transformer的使用及fine-tune教程
- MySQL系列之事务日志Redo log学习笔记
- jQuery 的基本使用