将昨天的栗子略作修改,工序是文本,顺序乱。 有两个工作表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 结果: 数组可以像工作表一样,不同(或相同)的工作表的单元格对单元格赋值。 数组就是一个可大可小的工作表。 |
|