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

任意转置数据顺序

作者:绿色风 分类: 时间:2022-08-18 浏览:112
楼主
wp8680
题:
 
答:
  1. Sub 重排区域()
  2.     Dim rng As Range, target As Range, arr, brr, a%, b%, x%, y%, R, S
  3.     Dim k1%, k2%, m1%, m2%, k%
  4.     On Error Resume Next
  5. ok1:
  6.     Set rng = Application.InputBox("请选择数据源区。", "提示:", , , , , , 8)
  7.     If rng Is Nothing Then Err.Clear: GoTo ok1
  8. ok2:
  9.     Set target = Application.InputBox("请选择数据存放区。", "提示:", , , , , , 8)
  10.     If target Is Nothing Then Err.Clear: GoTo ok2
  11.     arr = rng.Value
  12.     a = UBound(arr, 1)
  13.     b = UBound(arr, 2)
  14.     brr = target.Value
  15.     x = UBound(brr, 1)
  16.     y = UBound(brr, 2)
  17.     m1 = 1
  18.     m2 = 1
  19.     If a * b > x * y Then MsgBox "你选择的存放区单元格数量小于数据源区,可能有部分数据不能显示!"
  20.     R = MsgBox("数据源提取数据顺序,点“是”按行提取,点“否”按列提取", vbYesNo, "请选择数据提取顺序:")
  21.     S = MsgBox("数据的存放顺序,点“是”按行存放,点“否”按列存放", vbYesNo, "请选择数据存放顺序:")
  22.     For k1 = 1 To IIf(R = 6, a, b)
  23.         For k2 = 1 To IIf(R = 6, b, a)
  24.             k = k + 1
  25.             If k > x * y Then Exit For
  26.             brr(IIf(S = 6, m1, m2), IIf(S = 6, m2, m1)) = arr(IIf(R = 6, k1, k2), IIf(R = 6, k2, k1))
  27.             m2 = m2 + 1
  28.             If m2 = IIf(S = 6, y, x) Then m1 = m1 + 1: m2 = 1
  29.         Next k2
  30.     Next k1
  31.     target.Value = brr
  32. End Sub


工作簿1.rar

2楼
liyh
谢谢楼主分享,学习一下

免责声明

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

评论列表
sitemap