特殊数字拆分 -- 插入附加行

77 篇文章 6 订阅
19 篇文章 0 订阅

实例需求:A列中从A3单元格开始保存原始数据,数量不确定,每个数据均为7个数字组成,现需要将数字逐个拆分B列至H列,如果H列的数字小于等于4,那么将该行数据复制一行(简称为附加行),并且最后一个数字加10,如下图中黄色单元格所示。

在这里插入图片描述

示例代码

Sub demo()
    Dim res()
    lst = Cells(Rows.Count, 1).End(xlUp).Row
    If lst > 2 Then
        arr = Range("A3:A" & lst).Value
        r = 1
        ReDim res(1 To lst * 2 - 4, 1 To 7)
        For i = 1 To lst - 2
            n = CStr(arr(i, 1))
            For j = 1 To 7
                res(r, j) = Mid(n, j, 1)
                res(r + 1, j) = res(r, j)
            Next
            r = r + 1
            If res(r, 7) <= 4 Then
                res(r, 7) = res(r, 7) + 10
                r = r + 1
            End If
        Next
        [b3].Resize(r - 1, 7).Value = res
    End If
End Sub

【代码解析】
第3行代码获取A列最后一个数据所在行号。
第4行代码判断A列是否有数据,如果lst大于2说明有数据。
第5行代码将A列数据读入数组。
第7行代码声明动态数组用于保存拆分数据。
第8~19行代码循环处理每个数据。
第9行代码将数据转换为字符。
第10~13行代码将数据拆分为数字,保存在结果数组res中。
此处有一个小技巧,第11~12行代码将相同的拆分数字写入了res(r, j)和res(r+1, j),此时并没有判断最后一个数字的大小,是否需要创建附加行,这样处理的好处在于,无需再次循环填写附加行。
第15行代码判断最后一个数字是否小于等于4,如果满足条件,第16行代码将最后一个数字加10。
同学们请注意res下标r的处理技巧,首先第14行代码中r+1,此时r指向第12行代码填充的行,如果满足第15行代码条件,那么下一次循环时此行的数据将被覆盖,如果第15行代码条件不满足,那么第17行代码中r+1,此时r指向一个新行。
第20行代码将结果数据写入工作表。


如果只有少量数据,是否使用上述技巧对整体性能的影响可以忽略不计,但是处理大量数据时,每次循环的开销累计起来就会相当客观。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值