ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 373|回复: 0

[求助] vba 字典字典有时失败优化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-28 17:13 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请老师协助看能不能将sub优化
另我执行字典时,
部分会显示不出来
所以后续参照的资料就不正确了

Sub AAA()
'
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


Set Sheet1 = Application.ThisWorkbook.Worksheets("Sheet1")
Set Sheet2 = Application.ThisWorkbook.Worksheets("Sheet2")
Set Sheet3 = Application.ThisWorkbook.Worksheets("Sheet3")
Set Sheet4 = Application.ThisWorkbook.Worksheets("Sheet4")
Set Sheet5 = Application.ThisWorkbook.Worksheets("Sheet5")
Set Sheet6 = Application.ThisWorkbook.Worksheets("Sheet6")
Set Sheet7 = Application.ThisWorkbook.Worksheets("Sheet7")
Set Sheet8 = Application.ThisWorkbook.Worksheets("Sheet8")
Set Sheet9 = Application.ThisWorkbook.Worksheets("Sheet9")
Dim i As Integer

Sheet7.Range("d6:ac100").ClearContents
Sheet9.Range("d6:ah100").ClearContents
Sheet1.Range("O2:U3000").ClearContents
Sheet4.Range("L2:R100").ClearContents
Sheet5.Range("L2:R100").ClearContents


    Set d1 = CreateObject("scripting.dictionary")
    arr = Sheets("Sheet2").Range("a2:j" & Sheets("Sheet2").Range("b65536").End(3).Row).Value
    brr = Sheets("Sheet1").Range("e2:e" & [m65536].End(3).Row)
    ReDim crr(1 To UBound(brr), 1 To 1)
    For i = 1 To UBound(arr)
        d1(arr(i, 1)) = arr(i, 4)
    Next i
    For y = 1 To UBound(brr)
        crr(y, 1) = d1(brr(y, 1))
    Next y
    Sheets("Sheet1").Range("s2").Resize(UBound(crr), 1) = crr

    ReDim crr(1 To UBound(brr), 1 To 1)
    For i = 1 To UBound(arr)
        d1(arr(i, 1)) = arr(i, 3)
    Next i
    For y = 1 To UBound(brr)
        crr(y, 1) = d1(brr(y, 1))
    Next y
    Sheets("Sheet1").Range("t2").Resize(UBound(crr), 1) = crr

    Set d1 = CreateObject("scripting.dictionary")
    arr = Sheets("Sheet2").Range("h2:j" & Sheets("Sheet2").Range("b65536").End(3).Row).Value
    brr = Sheets("Sheet1").Range("f2:f" & [m65536].End(3).Row)
    ReDim crr(1 To UBound(brr), 1 To 1)
    For i = 1 To UBound(arr)
        d1(arr(i, 1)) = arr(i, 3)
    Next i
    For y = 1 To UBound(brr)
        crr(y, 1) = d1(brr(y, 1))
    Next y
    Sheets("Sheet1").Range("U2").Resize(UBound(crr), 1) = crr


For i = 2 To Sheet1.Cells(Rows.Count, "c").End(xlUp).Row

Sheet1.Cells(i, 15) = (Sheet3.Cells(18, 4) - Sheet1.Cells(i, 9)) / 365
Sheet1.Cells(i, 16) = (Sheet3.Cells(18, 4) - Sheet1.Cells(i, 4)) / 365


    If Sheet1.Cells(i, 15) >= 21 Then
    Sheet1.Cells(i, 17) = "21年以上"
         ElseIf Sheet1.Cells(i, 15) >= 16 Then
         Sheet1.Cells(i, 17) = "16-20年"

         ElseIf Sheet1.Cells(i, 15) >= 11 Then
         Sheet1.Cells(i, 17) = "11-15年"

         ElseIf Sheet1.Cells(i, 15) >= 6 Then
         Sheet1.Cells(i, 17) = "6-10年"

         Else
         Sheet1.Cells(i, 17) = "5年以下"

         End If



    If Sheet1.Cells(i, 16) >= 46 Then
    Sheet1.Cells(i, 18) = "46以上"
         ElseIf Sheet1.Cells(i, 16) >= 41 Then
         Sheet1.Cells(i, 18) = "41-45"
         ElseIf Sheet1.Cells(i, 16) >= 36 Then
         Sheet1.Cells(i, 18) = "36-40"
         ElseIf Sheet1.Cells(i, 16) >= 31 Then
         Sheet1.Cells(i, 18) = "31-35"
         ElseIf Sheet1.Cells(i, 16) >= 26 Then
         Sheet1.Cells(i, 18) = "26-30"
         Else
         Sheet1.Cells(i, 18) = "25以下"
         End If

Next

    Set d1 = CreateObject("scripting.dictionary")
    arr = Sheets("Sheet2").Range("o2:p" & Sheets("Sheet2").Range("b65536").End(3).Row).Value
    brr = Sheets("Sheet4").Range("f2:f" & [m65536].End(3).Row)
    ReDim crr(1 To UBound(brr), 1 To 1)
    For i = 1 To UBound(arr)
        d1(arr(i, 1)) = arr(i, 2)
    Next i
    For y = 1 To UBound(brr)
        crr(y, 1) = d1(brr(y, 1))
    Next y
    Sheets("Sheet4").Range("R2").Resize(UBound(crr), 1) = crr

maxRow1 = Sheet4.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To maxRow1
Sheet4.Cells(i, 12) = (Sheet3.Cells(18, 4) - Sheet4.Cells(i, 8)) / 365
Sheet4.Cells(i, 13) = (Sheet3.Cells(18, 4) - Sheet4.Cells(i, 4)) / 365

    Set d1 = CreateObject("scripting.dictionary")
    arr = Sheets("Sheet6").Range("a2:i" & Sheets("Sheet2").Range("b65536").End(3).Row).Value
    brr = Sheets("Sheet5").Range("a2:a" & [m65536].End(3).Row)
    ReDim crr(1 To UBound(brr), 1 To 1)
    For ii = 1 To UBound(arr)
        d1(arr(ii, 1)) = arr(ii, 9)
    Next ii
    For y = 1 To UBound(brr)
        crr(y, 1) = d1(brr(y, 1))
    Next y
    Sheets("Sheet5").Range("R2").Resize(UBound(crr), 1) = crr


    If Sheet4.Cells(i, 12) >= 21 Then
    Sheet4.Cells(i, 14) = "21年以上"
         ElseIf Sheet4.Cells(i, 12) >= 16 Then
         Sheet4.Cells(i, 14) = "16-20年"
         ElseIf Sheet4.Cells(i, 12) >= 11 Then
         Sheet4.Cells(i, 14) = "11-15年"
         ElseIf Sheet4.Cells(i, 12) >= 6 Then
         Sheet4.Cells(i, 14) = "6-10年"
         Else
         Sheet4.Cells(i, 14) = "5年以下"
         End If

    If Sheet4.Cells(i, 13) >= 46 Then
    Sheet4.Cells(i, 15) = "46以上"
         ElseIf Sheet4.Cells(i, 13) >= 41 Then
         Sheet4.Cells(i, 15) = "41-45"
         ElseIf Sheet4.Cells(i, 13) >= 36 Then
         Sheet4.Cells(i, 15) = "36-40"
         ElseIf Sheet4.Cells(i, 13) >= 31 Then
         Sheet4.Cells(i, 15) = "31-35"
         ElseIf Sheet4.Cells(i, 13) >= 26 Then
         Sheet4.Cells(i, 15) = "26-30"
         Else
         Sheet4.Cells(i, 15) = "25以下"
         End If

Next

maxRow2 = Sheet5.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To maxRow2
Sheet5.Cells(i, 12) = (Sheet3.Cells(18, 4) - Sheet5.Cells(i, 8)) / 365
Sheet5.Cells(i, 13) = (Sheet3.Cells(18, 4) - Sheet5.Cells(i, 4)) / 365

    If Sheet5.Cells(i, 12) >= 21 Then
    Sheet5.Cells(i, 14) = "21年以上"
         ElseIf Sheet5.Cells(i, 12) >= 16 Then
         Sheet5.Cells(i, 14) = "16-20年"
         ElseIf Sheet5.Cells(i, 12) >= 11 Then
         Sheet5.Cells(i, 14) = "11-15年"
         ElseIf Sheet5.Cells(i, 12) >= 6 Then
         Sheet5.Cells(i, 14) = "6-10年"
         Else
         Sheet5.Cells(i, 14) = "5年以下"
         End If

    If Sheet5.Cells(i, 13) >= 46 Then
    Sheet5.Cells(i, 15) = "46以上"
         ElseIf Sheet5.Cells(i, 13) >= 41 Then
         Sheet5.Cells(i, 15) = "41-45"
         ElseIf Sheet5.Cells(i, 13) >= 36 Then
         Sheet5.Cells(i, 15) = "36-40"
         ElseIf Sheet5.Cells(i, 13) >= 31 Then
         Sheet5.Cells(i, 15) = "31-35"
         ElseIf Sheet5.Cells(i, 13) >= 26 Then
         Sheet5.Cells(i, 15) = "26-30"
         Else
         Sheet5.Cells(i, 15) = "25以下"
         End If
Next


For i = 6 To Sheet7.Cells(Rows.Count, 3).End(xlUp).Row - 1








Module2.zip

2.38 KB, 下载次数: 0

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-29 14:32 , Processed in 0.024408 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表