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

 更新时间:2020年02月11日 13:05:01   投稿:jingxian  
今天小编就为大家分享一篇Transpose 数组行列转置的限制方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

在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

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

这么好用的神奇代码,有时会莫名其妙的罢工,我们来看看下面的代码,运行代码将给出“类型不匹配”的错误提示,错误号为“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读取yaml文件的详细教程

    Python读取yaml文件的详细教程

    这篇文章主要给大家介绍了关于Python读取yaml文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • Django objects的查询结果转化为json的三种方式的方法

    Django objects的查询结果转化为json的三种方式的方法

    这篇文章主要介绍了Django objects的查询结果转化为json的三种方式的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Python+Pygame实现简单的单词小游戏

    Python+Pygame实现简单的单词小游戏

    语言是一种艺术,但是作为语言的基础——词汇,却不像艺术那样赏心悦目。不断的记忆与复习,让词汇成为很多孩子在学习英语时,最难完全攻克的关卡。本文就来用Python制作一个简单的英语单词游戏吧
    2023-03-03
  • python与字符编码问题

    python与字符编码问题

    这篇文章主要介绍了python与字符编码问题,下面对编码问题做个简单的总结,感兴趣的朋友跟随小编一起看看吧
    2019-05-05
  • python实现最长公共子序列

    python实现最长公共子序列

    这篇文章主要为大家详细介绍了python实现最长公共子序列的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • python 中的 BeautifulSoup 网页使用方法解析

    python 中的 BeautifulSoup 网页使用方法解析

    这篇文章主要介绍了python 中的 BeautifulSoup 网页使用方法解析,文章基于python的相关资料展开详细内容介绍,具有一定的参考价值需要的小伙伴可以参考一下
    2022-04-04
  • python 借助numpy保存数据为csv格式的实现方法

    python 借助numpy保存数据为csv格式的实现方法

    今天小编就为大家分享一篇python 借助numpy保存数据为csv格式的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python-with open() as f的用法及说明

    Python-with open() as f的用法及说明

    这篇文章主要介绍了Python-with open() as f的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)

    这篇文章主要介绍了使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • python数据结构leetcode338比特位计数算法

    python数据结构leetcode338比特位计数算法

    这篇文章主要介绍了力扣刷题中python数据结构leetcode338比特位计数算法解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论