Sub 二转一()
With Sheets("转化前") '''使用工作表《转化前》
arr = .UsedRange '''利用UsedRange属性,将使用的单元格区域放入数组arr中,形成二维数组
End With '''with结束语句
'''在数组中将合并单元格造成的空值填充上值
For i = 2 To UBound(arr) '''循环变量i,在第2行开始,循环到最后一行数据,循环第一维度
If arr(i, 1) = "" Then '''判断语句,如果数组第一列的值为空,则
arr(i, 1) = arr(i - 1, 1) '''此数组元素值等于上一行的数组元素值
End If '''判断语句结束
Next i '''循环语句结束
Set d = CreateObject("scripting.dictionary") '''定义d为字典脚本
For i = 2 To UBound(arr) '''再次逐行遍历数组arr
For j = 3 To UBound(arr, 2) - 1 '''循环变量j,从第3列开始,逐列循环数组arr的第二维度,不包含最后一列
If arr(i, j) > 0 Then '''如果行列交叉点上的数组元素值大于0,则说明此值我们应该罗列
s = arr(i, 1) & "|" & arr(i, 2) & "|" & arr(1, j) '''将型号、颜色、规格,合并为一个字符串s,用|间隔
d(s) = arr(i, j) '''将s字符串装入字典d的key中,并且赋值对应item值为对应的数值
End If '''判断语句结束
Next j '''j循环语句结束
Next i '''i循环语句结束
With Sheets("转化后") '''使用工作表《转化后》
.UsedRange.ClearContents '''使用ClearContents方法,将被使用单元格区域清空
.[A1] = "型号" '''A1单元格赋值字符串“型号”
.[B1] = "颜色" '''同上,赋值B1单元格
.[C1] = "规格" '''同上,赋值C1单元格
.[D1] = "数值" '''同上,赋值D1单元格
k = 1 '''设置一个变量k,初始值为1
For Each dic In d.keys '''在字典d中循环每一个字典元素dic
k = k + 1 '''计数器,每循环一次,累加1。作为单元格行号使用
'''Split函数:按指定字符,拆分字符串,成为一个一维数组,数组编号从0开始
.Cells(k, 1) = Split(dic, "|")(0) '''对应行号k的A列单元格,赋值拆分后的一个值
.Cells(k, 2) = Split(dic, "|")(1) '''同上理,赋值第二个值
.Cells(k, 3) = Split(dic, "|")(2) '''同上理,赋值第三个值
.Cells(k, 4) = d.Item(dic) '''对应的item值,赋值给D列单元格
Next '''结束for each循环
End With '''with结束语句
Erase arr '''释放arr数组
Set d = Nothing '''释放字典d
End Sub '''工程结束