Excel 使用其他工作簿中的VLOOKUP进行更快的循环

Excel 使用其他工作簿中的VLOOKUP进行更快的循环,excel,vba,vlookup,Excel,Vba,Vlookup,该代码从同一工作表中的另一个单元格区域(“非订单原始明细报告”)获取信息,并使用左侧单元格的数据在旁边创建一个新的单元格 对于70k行的单元格,我的代码需要45分钟到一小时。有没有办法让循环更快 Sub cruzar() Dim i As Long Dim last As Long Dim user As String Application.Calculation = xlCalculationManual Application.EnableEvents = False Applicat

该代码从同一工作表中的另一个单元格区域(“非订单原始明细报告”)获取信息,并使用左侧单元格的数据在旁边创建一个新的单元格

对于70k行的单元格,我的代码需要45分钟到一小时。有没有办法让循环更快

Sub cruzar()

Dim i As Long
Dim last As Long
Dim user As String

Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Sheets("Non Order RAW Detail Report").Select
last = ActiveSheet.UsedRange.Rows.Count

'-------------Cruzar--------------------------------
Range("W1").Value = "Year"
Range("x1").Value = "Month"
Range("y1").Value = "Creation Date"
Range("z1").Value = "Closed Date"
Range("AA1").Value = "Type Inquiry"
Range("AB1").Value = "Value"
Range("AC1").Value = "Status"
Range("AD1").Value = "Equal Month"
Range("AE1").Value = "Days"
Range("AF1").Value = "Bracket"
Range("W1:AF1").Interior.ColorIndex = 49
Range("W1:AF1").Font.Color = vbWhite
Range("W1:AF1").Font.Bold = True

user = Environ("username")

For i = 2 To last

    Cells(i, 23).Value = Cells(i, 15).Value
    Cells(i, 23).NumberFormat = "yyyy"

    Cells(i, 24).Value = Cells(i, 15).Value
    Cells(i, 24).NumberFormat = "mm"

    Cells(i, 25).Value = Cells(i, 15).Value
    Cells(i, 25).NumberFormat = "mm/dd/yyyy"

    Cells(i, 26).Value = Cells(i, 16).Value
    Cells(i, 26).NumberFormat = "mm/dd/yyyy"

    Cells(i, 27).Formula = "=VLOOKUP(N" & i & ",'C:\Users\" & user & "\Desktop\Americas\00 Inputs\[CategoryList_NAM_v2.xlsx]CATEGORIES'!$I:$J,2,0)"

    Cells(i, 28) = 1

    If Cells(i, 5).Value = "FCR" Then
        Cells(i, 29).Value = "FCR"
    Else
        Cells(i, 29).Value = "Follow Up"
    End If

    Cells(i, 30).Formula = "=IF(E" & i & "=""FCR"",""FCR"",IF(AND(MONTH(O" & i & ")=MONTH(P" & i & "),YEAR(O" & i & ")=YEAR(P" & i & ")),""Closed"",""Open""))"

    Cells(i, 31).Formula = "=IF(E" & i & "=""FCR"",""FCR"",IF(AD" & i & "=""Open"",""Open"",IF(((P" & i & "-O" & i & ")*24)<24,0,LOOKUP(((P" & i & "-O" & i & ")*24),'C:\Users\" & user & "\Desktop\Americas\00 Inputs\[1610_InputsDB.xlsx]Input'!$A$2:$B$366,'C:\Users\" & user & "\Desktop\Americas\00 Inputs\[1610_InputsDB.xlsx]Input'!$C$2:$C$366))))"

    Cells(i, 32).Formula = "=IF(AE" & i & "=""FCR"",""FCR"",IF(AE" & i & "=""Open"",""Open"",LOOKUP(AE" & i & ",'C:\Users\" & user & "\Desktop\Americas\00 Inputs\[1610_InputsDB.xlsx]Input'!$E$2:$F$9,'C:\Users\" & user & "\Desktop\Americas\00 Inputs\[1610_InputsDB.xlsx]Input'!$G$2:$G$9)))"

Next

Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub-cruzar()
我想我会坚持多久
持续时间一样长
将用户设置为字符串
Application.Calculation=xlCalculationManual
Application.EnableEvents=False
Application.ScreenUpdating=False
工作表(“非订单原始明细报告”)。选择
last=ActiveSheet.UsedRange.Rows.Count
“------克鲁扎--------------------------------
范围(“W1”)。值=“年”
范围(“x1”)。值=“月”
范围(“y1”).Value=“创建日期”
范围(“z1”).Value=“关闭日期”
范围(“AA1”).Value=“类型查询”
范围(“AB1”).Value=“值”
范围(“AC1”).Value=“状态”
范围(“AD1”).Value=“等月”
范围(“AE1”).Value=“天”
范围(“AF1”).Value=“括号”
范围(“W1:AF1”)。内饰颜色指数=49
范围(“W1:AF1”).Font.Color=vbWhite
范围(“W1:AF1”).Font.Bold=True
用户=环境(“用户名”)
对于i=2的持续时间
单元格(i,23).值=单元格(i,15).值
单元格(i,23)。NumberFormat=“yyyy”
单元格(i,24).值=单元格(i,15).值
单元格(i,24)。NumberFormat=“mm”
单元格(i,25).值=单元格(i,15).值
单元格(i,25).NumberFormat=“mm/dd/yyyy”
单元格(i,26).值=单元格(i,16).值
单元格(i,26).NumberFormat=“mm/dd/yyyy”
单元格(i,27)。公式=“=VLOOKUP(N”&i&“,'C:\Users\”&user&“\Desktop\Americas\00输入\[CategoryList\u NAM_v2.xlsx]CATEGORIES'!$i:$J,2,0)”
单元(i,28)=1
如果单元格(i,5).Value=“FCR”则
单元格(i,29)。Value=“FCR”
其他的
单元格(i,29)。Value=“后续”
如果结束
单元格(i,30)。公式=“=IF(E”&i&“=”FCR“,”FCR“,”IF(月(O”&i&“)=月(P”&i&“,”年(O”&i&“)=年(P”&i&“,”关闭“,”打开“)”

单元格(i,31)。公式=“=IF(E”&i&“=”FCR“,”FCR“,”IF(AD”&i&“=”Open“,”Open“,”IF(((P”&i&“-O”&i&“)*24)您可以一次性将公式和值写入范围。无需为此循环。如果单元格(i,5),我将生成
。Value=“FCR”然后是单元格(i,29)。Value=“FCR”其他单元格(i,29)。Value=“Follow=”后续"结束If
逻辑到公式中,并完全放弃循环。使用变量数组,限制vba引用工作表的次数。Buld加载数组并批量放置它,然后编写不带循环的公式并格式化整个列。我认为,在将来,如果您试图使用aplcation.XXXX=False,请查看code和问题为什么。根据我的经验,使用这些命令通常是需要优化的症状。@BigBen我已经这样做了,谢谢,但仍然有相同的时间。@EstebanCalderon在这个过程中如何使用数组?这可能与堆栈溢出无关。