• 使用VBA快速完成不规则数据整理


    示例需求:原始数据如下图所示,药名的字数不相同,每个汉子的拼音顺序保存在C列至G列。
    在这里插入图片描述

    现在需要将数据整理为如下3列的格式。
    在这里插入图片描述

    示例代码如下。

    Sub demo()
        Dim res()
        cnt = 1
        arr = Sheet1.[a1].CurrentRegion.Value
        For i = 2 To UBound(arr)
            bFirst = True
            For j = 3 To 7
                If arr(i, j) = "" Then
                    Exit For
                Else
                    ReDim Preserve res(1 To 3, 1 To cnt)
                    If bFirst Then
                        res(1, cnt) = arr(i, 1)
                        bFirst = False
                    End If
                    res(2, cnt) = arr(i, 2)
                    res(3, cnt) = arr(i, j)
                    cnt = cnt + 1
                End If
            Next
        Next
        Sheet2.Range("2:60000").Clear
        Sheet2.[a2].Resize(cnt - 1, 3).Value = Application.Transpose(res)
    End Sub
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    【代码解析】
    第2行代码声明数组用于保存转化后的数据。
    第3行代码设置变量用于记录数据行号。
    第4行代码将原始数据读取到数组中。
    第5~21行代码循环处理数据。
    第6行代码设置标识bFirst为True,当前数据行为一个新的药名。
    第7~20行代码循环处理某个药名的全部拼音。
    第8行代码判断单元格内容是否为空,如果为空说明已经处理完当前数据行,第9行代码结束当前For循环。
    第11行代码重新声明结果数组。
    第12行代码判断bFirst标识变量。
    如果为True就执行第14行代码,将药名写入序号写入第一列,然后执行第15行代码,修改标识变量值为False。
    第16~17行代码将药名和拼音更新到第2列和第3列。
    第22行代码情况结果工作表的数据区域。
    第23行代码将res数组写入到工作表中,其中Transpose实现数组转置。

  • 相关阅读:
    23种设计模式之代理模式(动态代理)
    c++核心准则
    Python:功能强大的eval函数
    web3.js:使用eth包
    5. kafka单机版本
    有哪些挣钱软件一天能赚几十元?盘点十个能长期做下去的挣钱软件
    数仓Hive和分布式计算引擎Spark多整合方式实战和调优方向
    ArcGIS不同图斑设置不同的透明度
    Ethereum Classic的难度计算|猿创征文
    8-8归并排序
  • 原文地址:https://blog.csdn.net/taller_2000/article/details/126518739