47、[VBA入门到放弃笔记]字典坐标用法

数据--->结果

47、[VBA入门到放弃笔记]字典坐标用法_第1张图片
数据--->结果

要求:将右边的表格转换成左边的表格。就是一维表转二维表。


思路:

  • 1、先声明一个足够大的数组,用来装载转置的数据。
  • 2、用字典判断产品和工序是否在字典里,如果不在字典里,就增加行数和列数,再用字典分别标记行号和列号。
  • 3、直接根据字典标记的行号、列号,形成坐标(X,Y)输出到目标数组当中。
Sub cctv()
    Dim arr, brr(), i&, R&, C&, R1&, C1&
    arr = [i1].CurrentRegion '//原始数据
    ReDim brr(1 To UBound(arr), 1 To 10) '//足够大的数组
    Set d = CreateObject("scripting.dictionary")   '//创建字典
    R = 1: C = 1   '//初始化行号列号
    For i = 2 To UBound(arr)  '//遍历原始数据
'//如果产品和工序不存在字典里,就分别在数组brr里增加行和列,也就是向下和向右扩张数组
        If Not d.exists(arr(i, 1)) Then R = R + 1: d(arr(i, 1)) = R
        If Not d.exists(arr(i, 2)) Then C = C + 1: d(arr(i, 2)) = C
      '//直接根据上面的行号列号,来输出数据到数组brr  
        R1 = d(arr(i, 1))
        C1 = d(arr(i, 2))
    '//输出数据到数组brr    
        brr(R1, 1) = arr(i, 1)   '//行
        brr(1, C1) = arr(i, 2)   '//列
        brr(R1, C1) = arr(i, 3)  '//上线时间
        
    Next
    [a10].Resize(R, C) = brr   '//输出数据到单元格区域
End Sub

你可能感兴趣的:(47、[VBA入门到放弃笔记]字典坐标用法)