常用的一些vba代码

本文探讨了VBA中大数据处理的两种方法,对比了直接赋值给单元格区域与使用数组赋值的效率差异。通过示例代码展示了如何利用数组优化Excel操作,减少了运行时间。此外,还提供了删除空行的代码,进一步提高数据处理的效率。
摘要由CSDN通过智能技术生成

数组赋值给单元格区域

Sub suijishu() '随机数
    Dim shuzu(1 To 50000, 1 To 20) As Variant '定义数组,注意是从1开始的
    
    Dim hang As Long
    Dim lie As Long
    
    Randomize
    For hang = 1 To 50000
        For lie = 1 To 20
            shuzu(hang, lie) = Rnd()
            
        Next lie
    Next hang
    
    '数组赋值给单元格区域
    Sheet1.Range(Cells(1, 1), Cells(50000, 20)) = shuzu
    
End Sub

下面的代码是没有优化的代码,功能与上面一样(执行时间非常长)

Sub suiji2()
    Dim hang As Long
    Dim lie As Long
    Randomize
    For hang = 1 To 50000
        For lie = 1 To 20
            Sheet2.Cells(hang, lie) = Rnd()
            
        Next lie
    Next hang
    
End Sub

即便是前后增加关闭显示,效率提升也很有限。

运行时间

详细代码如下


Sub suiji3()
    Dim time1 As Single
    Dim time2 As Single
    
    time1 = Timer
    
    
    Dim hang As Long
    Dim lie As Long
    Randomize
    For hang = 1 To 50000
        For lie = 1 To 20
            Sheet2.Cells(hang, lie) = Rnd()
            
        Next lie
    Next hang
    
    
    time2 = Timer
    Dim timecha As Single
    timecha = (time2 - time1)
    
    MsgBox "运行时间" & timecha & "秒"
    
    
End Sub

另外的一段代码

对内容进行处理之后再赋值到相应的表格

参考代码如下

’参考代码https://blog.csdn.net/iamlaosong/article/details/46878321
Sub fuzhi() '大数据复制
    Dim shuzu() ' As Variant
    shuzu = Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(50000, 20)).Value
    'shuzu = Sheet1.Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(50000, 20)).Value  '注意此句无法通过
    
    Dim shuzu2(1 To 50000, 1 To 20) As Variant '定义数组,注意是从1开始的
    Dim hang As Long
    Dim lie As Long
    '此循环内可以添加相应的计算
    For hang = 1 To 50000
        For lie = 1 To 20
            shuzu2(hang, lie) = shuzu(hang, lie)
        Next lie
    Next hang
    
    '数组赋值给单元格区域
    Sheets(3).Range(Cells(1, 1), Cells(50000, 20)) = shuzu2
    
End Sub

大数据分拣


Sub fuzhi() '大数据复制

    
    Const DEF_CGQSL As Long = 14    '定义 传感器数量
    Const DEF_TiaoM As Long = 35000  '定义 处理条目
    
    
    Dim DEF_BiaoGZHS As Long
    DEF_BiaoGZHS = 1 + DEF_CGQSL * DEF_TiaoM
    
    Dim shuzu()  As Variant
    shuzu = Sheets(1).Range(Sheets(1).Cells(2, 1), Sheets(1).Cells(DEF_BiaoGZHS, 26)).Value
    
    Dim i As Long
    Dim hang As Long
    Dim book2hang As Long
    book2hang = 1
    
    Dim Low1 As Long
    Dim Up1 As Long
    Low1 = LBound(shuzu, 1) '1
    Up1 = UBound(shuzu, 1) 'hang
    Dim Low2 As Long
    Dim Up2 As Long
    Low2 = LBound(shuzu, 2) '1
    Up2 = UBound(shuzu, 2) '26
    

    Dim shuzu2(1 To DEF_TiaoM + 1, 1 To 26 * DEF_CGQSL) As Variant '定义数组,注意是从1开始的
'
        Dim cgq As Long
        For cgq = 1 To DEF_CGQSL
            book2hang = 1
            For hang = cgq To DEF_BiaoGZHS Step DEF_CGQSL
                For i = 1 To 26
                    'If (hang > 149950) Then Debug.Print hang
                    If hang <= DEF_BiaoGZHS And book2hang < DEF_TiaoM Then
                        shuzu2(book2hang, i + (cgq - 1) * 26) = shuzu(hang, i)
                    End If
                Next i
                book2hang = book2hang + 1
           Next hang
        Next cgq
'
    book2hang = 1
    '数组赋值给单元格区域
    Sheets(2).Range(Cells(1, 1), Cells(DEF_TiaoM + 1, 26 * DEF_CGQSL)) = shuzu2

End Sub

 删除空行

sub  删除空行()
     Sheets(1).Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
end sub

anlog  2021年3月24日00点46分

特此记录

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值