Excel精英培训网

 找回密码
 注册
12
返回列表 发新帖
楼主: 无聊的疯子

[通知] 【VBA字典数组201301班】C组-第二讲作业上交处

[复制链接]
发表于 2013-11-13 22:09 | 显示全部楼层
C02:monicaj
   Dim arr(), brr()      'Arr为数所源,BRR为结果
    Dim bcol, count As Integer    'bcol为结果的列数   count为目标区域的数组元素个数
    Dim i As Integer     'Arr的行标
    Dim j As Integer     'Arr的列标
    Dim k As Integer     'brr的行标
    Dim m As Integer     'brr的列标
    Dim n As Integer         'arr中的个数
    n = 0
    If IsArray(rgSource) = True Then    '如果选择不是单一单元格

        arr = rgSource

        count = UBound(arr) * UBound(arr, 2)   'arr中元素的个数


        If Int(count / bGroupCount) = count / bGroupCount Then
            bcol = count / bGroupCount     'arr中元素的个数/要求的行数,向上取整得到brr列数
        Else
            bcol = Int(count / bGroupCount) + 1
        End If
     
        ReDim brr(1 To bGroupCount, 1 To bcol)    '重新定义BRR大小
        

        For i = 1 To UBound(arr)
            For j = 1 To UBound(arr, 2)    '对ARR中每个元素进行遍历
                n = n + 1     'ARR中元素的计数器
                If n / bcol = Int(n / bcol) Then
                    k = n / bcol
                Else
                    k = Int(n / bcol) + 1      'ARR中第N个元素在BRR中的行位置是n /BRR列数,向上取整
                End If
                If n Mod bcol = 0 Then      'ARR中第N个元素在BRR中的列位置是n /BRR取余,如可以整除,便是BRR的最大列数,BCOL。
                    m = bcol
                Else
                    m = n Mod bcol
                End If

                brr(k, m) = arr(i, j)
      
            Next
        Next


        rgDest.Resize(bGroupCount, bcol) = brr

    Else    '如果选择是单一单元格,直接赋值
        rgDest.Value = rgSource.Value
    End If

评分

参与人数 1金币 +10 收起 理由
无聊的疯子 + 10 结果正确,无第二题

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-4 01:45 , Processed in 0.203150 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表