分享

VBA入门67:字典标记行--数组对数组

 L罗乐 2019-08-24

将昨天的栗子略作修改,工序是文本,顺序乱。


有两个工作表A,B,A的单元格A1=B的单元格B10

用VBA代码写下就是

sheets('A').cells(1,1)=sheets('B').cells(10,2)

有两个数组A,B,假设这两个数组都和工作表一样大,用数组来写上面的VBA就是 A(1,1)=B(10,2)。

在数组对数组赋值的时候(提取数据),A(1,1)=B(10,2)方式也是可行的。

就上面的栗子来写一段代码,代码大体和上一文章的代码差不多。

Sub bbq()

    Dim arr, brr, d As Object, d1 As Object

    Set d = CreateObject('scripting.dictionary')

    arr = [a2:c16] '数据源

    brr = [e1:o4]  '转置的数据

    '将brr中的工序标记列

    For j = 2 To UBound(brr, 2)

        d(brr(1, j)) = j

    Next

    '字典标记行

    For i = 1 To UBound(arr)

        d(arr(i, 1) & arr(i, 2)) = i '标记行,如   A工序1=1     B工序2=6

        d(arr(i, 1)) = d(arr(i, 1)) & ',' & arr(i, 2) '为split函数做准备

    Next

    For i = 2 To UBound(brr)

        s = Split(d(brr(i, 1)), ',')

        For j = 1 To UBound(s)

            r = d(brr(i, 1) & s(j)) '读取行号(数组arr中)

            c = d(s(j)) '读取工序的列号(数组brr中)

            brr(i, c) = arr(r, 3) '数组对数组赋值

        Next

    Next

    '输出数组数据

    [e1].Resize(UBound(brr), UBound(brr, 2)) = brr

End Sub

结果:

数组可以像工作表一样,不同(或相同)的工作表的单元格对单元格赋值。

数组就是一个可大可小的工作表。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多