ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 二维数组的专用转置

二维数组的专用转置

作者:绿色风 分类: 时间:2022-08-18 浏览:62
楼主
DJ_Soo
基本上,我们在VBA中需要将数组转置的时候都会用application.Transpose(arr)这样的形式.
但是一定有人会发现这样做的弊端.
比如,我是一个二维数组,我转置的时候希望这个二维数组不要变成一维的.什么样的情况二维会被转为一维呢?我们举例来看:
Sub Test()
    Dim arr As Variant
    Dim arrTmp
    arr = [A1:A15]
    arrTmp = Application.Transpose(arr)
    Stop
End Sub
arr本来结构是arr(1 to 15,1 to 1)的,但是转置之后变成了一维的arrTmp(1 to 15),但是我想要的结果是arr(1 to 1,1 to 15)这样的啊!
另外,application.index()的用法也会将二维截取为一维,有时我们会喜欢并且确实的想转换为一维,但有时这样用却会导致意想不到的错误.所以,为了区别开来,我们最好还是自定义一个专用于二维数组的转置函数:

  1. Function Transpose(arr As Variant)
  2.     Dim arrTmp() As String
  3.     Dim lstRo As Long
  4.     Dim Ro As Long
  5.     Dim lstCol As Long
  6.     Dim Col As Long
  7.     Dim lRo As Byte
  8.     Dim lCol As Byte
  9.     lstRo = UBound(arr, 1)
  10.     lstCol = UBound(arr, 2)
  11.     lRo = LBound(arr, 1)
  12.     lCol = LBound(arr, 2)
  13.     ReDim arrTmp(lCol To lstCol, lRo To lstRo)
  14.     For Ro = lRo To lstRo
  15.         For Col = lCol To lstCol
  16.             arrTmp(Col, Ro) = arr(Ro, Col)
  17.         Next Col
  18.     Next Ro
  19.     Transpose = arrTmp
  20. End Function
写代码的时候根据需要调用工作表函数或者自定义函数,这样会感觉方便许多.
2楼
i彳亍
多谢楼主无私共享!学习了!
3楼
i彳亍
多谢楼主无私共享!学习了!
4楼
angel928
保存下来学习。
5楼
DJ_Soo
最小下标固定为1
  1. Function Transpose(arr As Variant)
  2.     Dim arrTmp() As String
  3.     Dim lstRo As Long
  4.     Dim Ro As Long
  5.     Dim lstCol As Long
  6.     Dim Col As Long
  7.     Dim lRo As Byte
  8.     Dim lCol As Byte
  9.     lstRo = UBound(arr, 1)
  10.     lstCol = UBound(arr, 2)
  11.     lRo = LBound(arr, 1)
  12.     lCol = LBound(arr, 2)
  13.     ReDim arrTmp(1 To lstCol - lCol + 1, 1 To lstRo - lRo + 1)
  14.     For Ro = 1 To lstRo - lRo + 1
  15.         For Col = 1 To lstCol - lCol + 1
  16.             arrTmp(Col, Ro) = arr(Ro + lRo - 1, Col + lCol - 1)
  17.         Next Col
  18.     Next Ro
  19.     Transpose = arrTmp
  20. End Function

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap