Transpose 数组行列转置的限制方式


Posted in Python onFebruary 11, 2020

提到数组,大家都不陌生,什么是数组行列转置呢?其实也很简单,如下图所示,行列转置就是将数组元素的存放方式进行转换,原来保存在第一列的数据,将保持在新数组的第一行,并且保持原有顺序,即6在第一个位置,8在最后一个位置。其他列依次类推。

Transpose 数组行列转置的限制方式

在Excel工作表中有个强大的函数Transpose,可以直接实现数组行列转置,作为VBA开发者来说,肯定不会忘记用这个。

Sub Demo1()
  Dim aData(1 To 3, 1 To 2)
  For i = 1 To 3
    For j = 1 To 2
      aData(i, j) = i + j * 5
    Next j
  Next i
  aTrans = Application.Transpose(aData)
  Debug.Print UBound(aData, 1) & " x "; UBound(aData, 2)
  Debug.Print "=>>"
  Debug.Print UBound(aTrans, 1) & " x "; UBound(aTrans, 2)
End Sub

一句代码轻松实现转置,比很多程序开发语言都要简单,在本地窗口中可以看到转置效果。

Transpose 数组行列转置的限制方式

这么好用的神奇代码,有时会莫名其妙的罢工,我们来看看下面的代码,运行代码将给出“类型不匹配”的错误提示,错误号为“13”。

Sub Demo2()
  Dim aData(1 To 3, 1 To 2)
  For i = 1 To 3
    For j = 1 To 2
      aData(i, j) = i + j * 5
    Next j
  Next i
  aData(1, 1) = Application.Rept("$", 256)
  aTrans = Application.Transpose(aData)  ' Runtime error "13"
  Debug.Print UBound(aData, 1) & " x "; UBound(aData, 2)
  Debug.Print "=>>"
  Debug.Print UBound(aTrans, 1) & " x "; UBound(aTrans, 2)
End Sub

转置失败的原因在于aData(1,1)的字符长度为256,Transpose所能够处理的数组元素字符长度最大为255。有时就是需要处理这样的数组元素,那么我们可以使用自定义函数进行数组的行列转置。TrasnposeArray可以实现二维数组的行列转置。其效果与Transpose函数相同。

Sub Demo3()
  Dim aData(1 To 3, 1 To 2)
  For i = 1 To 3
    For j = 1 To 2
      aData(i, j) = i + j * 5
    Next j
  Next i
  aData(1, 1) = Application.Rept("$", 256)
  aTrans = TransposeArray(aData)
  Debug.Print UBound(aData, 1) & " x "; UBound(aData, 2)
  Debug.Print "=>>"
  Debug.Print UBound(aTrans, 1) & " x "; UBound(aTrans, 2)
End Sub
 
Function TransposeArray(arrA) As Variant
  Dim aRes()
  If VBA.IsArray(arrA) Then
    ReDim aRes(LBound(arrA, 2) To UBound(arrA, 2), LBound(arrA, 1) To UBound(arrA, 1))
    For i = LBound(arrA, 1) To UBound(arrA, 1)
      For j = LBound(arrA, 2) To UBound(arrA, 2)
        aRes(j, i) = arrA(i, j)
      Next
    Next
    TransposeArray = aRes
  End If
End Function

补充说明一点,由于Transpose本身是工作表函数,因此大家使用时,需要注意它的另一个限制,就是被转置数组的最大行数是65,536。

以上这篇Transpose 数组行列转置的限制方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
selenium+python实现自动登录脚本
Apr 22 Python
Python中的函数作用域
May 07 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
500行python代码实现飞机大战
Apr 24 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
python如何安装下载后的模块
Jul 03 Python
通过实例解析python and和or使用方法
Nov 14 Python
python 检测图片是否有马赛克
Dec 01 Python
如何利用python创作字符画
Jun 25 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 #Python
tensorflow多维张量计算实例
Feb 11 #Python
python误差棒图errorbar()函数实例解析
Feb 11 #Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 #Python
python scatter函数用法实例详解
Feb 11 #Python
python可视化text()函数使用详解
Feb 11 #Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 #Python
You might like
桌面中心(一)创建数据库
2006/10/09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
jquery解析JSON数据示例代码
2014/03/17 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python使用udp实现聊天器功能
2018/12/10 Python
对pandas处理json数据的方法详解
2019/02/08 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
Golang中channel的原理解读(推荐)
2021/10/16 Golang
MySQL中order by的执行过程
2022/06/05 MySQL