일부 파일을 처리하는 데 너무 오래 걸리는 코드 블록이 있습니다. 작은 파일 (적은 데이터 행)은 제대로 작동하지만, 일단 150-300 정도되면 느린 속도로 시작합니다 (때로는 전체 프로세스가 실제로 멈추는 것 같아요). 그리고 때때로이 파일을 최대로 실행해야합니다. 6,000Excel에서 VBA를 사용하여 범위를 반복합니다.
에있는 VLookup()
함수에 여러 셀을 연결하려고합니다. .Range("J2:J" & MaxRow)
을 사용하여 전체 범위를 한 번에 설정할 수 있다는 것을 알고 있습니다. 그러나, 나는 그 세포의 가치를 확인하기 위해 세포의 블록을 반복하고있다. IF 비어 있습니다. THEN 수식을 적용하고 싶습니다. 그 셀에 이미 값이있는 경우 변경하지 않으므로 전체 범위 옵션이 저에게 효과적 일 것이라고 생각하지 않습니다 (적어도 제대로 얻을 수는 없었습니다).
Private Sub PullMIAFinalizedData(NewMIARep As Worksheet, MaxRow As Long, wkbFinalized As Workbook)
Dim wksFinalized As Worksheet
Dim lCount As Long
Dim sVLookupJBlock As String
Dim sVLookupKBlock As String
Application.Calculation = xlCalculationManual
sVLookupJBlock = "=IF(ISERROR(" & _
"VLOOKUP(RC1,'[" & wkbFinalized.Name & "]" & wksFinalized.Name & "'!C1:C13,13,FALSE))," & _
Chr(34) & Chr(34) & _
",VLOOKUP(RC1,'[" & wkbFinalized.Name & "]" & wksFinalized.Name & "'!C1:C13,13,FALSE))"
sVLookupKBlock = "=IF(ISERROR(" & _
"VLOOKUP(RC1,'[" & wkbFinalized.Name & "]" & wksFinalized.Name & "'!C1:C3,3,FALSE))," & _
Chr(34) & Chr(34) & _
",VLOOKUP(RC1,'[" & wkbFinalized.Name & "]" & wksFinalized.Name & "'!C1:C3,3,FALSE))"
For Each wksFinalized In wkbFinalized.Sheets
ShowAllRecords wksFinalized 'Custom Function to unhide/unfilter all data
With NewMIARep
For lCount = 2 To MaxRow
If .Range("J" & lCount).value = "" And .Range("K" & lCount).value = "" Then
.Range("J" & lCount).FormulaR1C1 = sVLookupJBlock
.Range("K" & lCount).FormulaR1C1 = sVLookupKBlock
Application.Calculate
With .Range("J" & lCount & ":K" & lCount)
.value = .value
End With
End If
Next lCount
.Range("J2:J" & MaxRow).NumberFormat = "mm/dd/yyyy"
End With
Next wksFinalized
Application.Calculation = xlCalculationAutomatic
End Sub
오전 난 그냥이 붙어?
무엇이 sVLookupJBlock입니까? 전체 코드를 게시 할 수 있습니까? – assylias
'Application.Calculate'을 제거한 후 사용해보십시오. 또한'Vlookup' 대신'.Find'를 사용하는 것으로 생각해 보셨습니까? (다시 값으로 변환하기 때문에?)이 링크의 4 절을보십시오. http://siddharthrout.wordpress.com/2011/07/14/find-and -findnext-in-excel-vba/ –
각 행에 '계산'을해야합니까? 그렇지 않은 경우 계산을 수동으로 변경하십시오. 또한 스크린 업데이트를 끄기 :'Application.ScreenUpdating = FALSE' 그리고 루프가 끝나면 다시 켜는 것을 잊지 마십시오. – bernie