常用功能加载宏——一维表转二维表
时间:2022-07-22
本文章向大家介绍常用功能加载宏——一维表转二维表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
实现了二维表格转换为一维表格,反过来的功能偶尔也是会用到的:
首先在customUI.xml中增加代码:
<button id="rbbtnTarnsTable1To2" label="一维表转二维表" onAction="rbbtnTarnsTable1To2" supertip="将选择的多行3列表格转换为多行多列表格。"/>
回调函数:
Sub rbbtnTarnsTable1To2(control As IRibbonControl)
Call MShtWk.TarnsTable1To2
End Sub
函数实现:
Sub TarnsTable1To2()
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 rng As Range
'确保选中的是单元格
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
Set rng = Selection
If rng.Columns.Count <> 3 Then
MsgBox "只能处理3列数据,其中第3列必须是数字。"
Exit Sub
End If
If rng.rows.Count < 2 Then
MsgBox "数据至少要有2行。"
Exit Sub
End If
arr = rng.Value
Dim rngout As Range
On Error Resume Next
Set rngout = Application.InputBox("请选择输出的起始单元格。", Default:=rng.Range("A1").Offset(rng.rows.Count + 1, 0).Address, Type:=8)
On Error GoTo 0
If rngout Is Nothing Then Exit Sub
Set rngout = rngout.Range("A1")
'记录项目的行号、姓名的列号
Dim strkey As String
For i = 2 To UBound(arr)
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 UBound(arr)
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
rngout.Resize(drow.Count + 1, dcol.Count + 1).Value = Result
Set drow = Nothing
Set dcol = Nothing
End Sub
- Go实战--实现简单的restful api
- 特殊字体神器-fontmin,秒杀一切工具
- 庖丁解牛——深入解析委托和事件
- RestQL:现代化的 API 开发方式
- 在递归函数中因不正确使用公共变量而形成死循环
- 用R语言做时间序列分析(附数据集和源码)
- Windows Live Writer插入代码vs2010插件
- 分布式队列编程优化篇
- 基于机器学习方法的POI品类推荐算法
- 【Scikit-Learn 中文文档】多类和多标签算法 - 监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】新异类和异常值检测 - 无监督学习 - 用户指南 | ApacheCN
- Golang中使用echo框架、MongoDB、JWT搭建REST API
- 在对象的原型上添加方法?
- KMeans聚类算法思想与可视化
- 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 数组属性和方法
- 一款基于 Python 语言的 Linux 资源监视器!
- 我讨厌这个绿油油的头像!我用opencv换一下背景
- 哈哈哈哈哈哈镜~
- 【对二寸照片的摧残】一:人脸马赛克
- 二寸照片识别/切边/矫正
- 给彦女王生成一副蒙太奇画像
- 设计模式~单例模式
- [Bazel]自定义工具链
- async和await的使用总结 ~ 竟然一直用错了c#中的async和await的使用。。
- 全网首发:12306抢票算法大曝光?(十张图搞定)
- 全网首发:12306抢票算法大曝光?(勘误)
- 新一代垃圾回收器ZGC的探索与实践
- Python GUI项目实战(一)登录窗体的设计与实现
- Python GUI项目实战(二)主窗体的界面设计与实现
- Python GUI项目实战(三)实现信息查询功能