|
361478294 发表于 2014-12-31 08:39
老师 能否加上注释
Sub yy() ''一维转二维
Sheets("互转测试表").Activate ''激活该表
Dim d(1 To 2) As New dictionary, arr, ar, i&, j&, m&, n&, x$, y$ ''定义变量
arr = [a1].CurrentRegion.Value ''原数据
ReDim brr(1 To UBound(arr), 1 To 100) ''重命名数组brr
n = 5
For i = 1 To UBound(arr) ''2至最后行循环(数组内)
x = arr(i, 7) ''学校名
ar = Array(arr(i, 2), arr(i, 3), arr(i, 4), arr(i, 5), arr(i, 6)) ''基础参数
y = Join(ar, ",") ''基础参数转字符串
If Not d(1).exists(x) Then ''如果字典(1)的学校名未有
n = n + 1: d(1)(x) = n: brr(1, n) = x ''学校名进字典,进数组brr第1行的n列(第6列开始)
End If
If Not d(2).exists(y) Then ''如果字典(2)的基础参数未有
m = m + 1: d(2)(y) = m: brr(m, 1) = m - 1 ''基础参数进字典,进数组brr第1列的m行(序号m-1)
For j = 0 To UBound(ar)
brr(m, j + 2) = ar(j) ''基础参数进数组2至6列的对应行
Next
End If ''下句:除行列标题外数量累加到对应行列
If i > 1 And j > 1 Then brr(d(2)(y), d(1)(x)) = brr(d(2)(y), d(1)(x)) + arr(i, 8)
Next
[a1].CurrentRegion.Clear ''删除原数据
Columns("B:B").NumberFormatLocal = "000000" ''B列的数字格式(邮政编码)
[a1].Resize(m, n) = brr ''结果数据
[a1] = "序号"
End Sub |
|