'How to Run a Macro only in rows with the date after March 1st?
I have a very big database (more than 450k rows and 75 columns) and to make it lighter and faster I created a Macro. I'm still a newbie to VBA, so it would be great if you could help me with this situation:
My code is already working for the whole thing, but now I need it to not run on rows in which column B contains a date older than March 1st 2022. Is it feasible for such a heavy weight (running on MacBook)?
Also, if you guys have any tip on how I could make the code any faster it would be awesome. Thank you all!
Sub Calculos_BD()
'
' Cálculos BD Macro
'
'
Application.ScreenUpdating = False
Sheets("InterExpenses_BD").Select
Range("L2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("L2").Select
Selection.AutoFill Destination:=Range("L2:AM2"), Type:=xlFillDefault
Range("AN2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("AO2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("AP2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("AQ2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("AR2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("AS2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("AT2").Select
ActiveCell.FormulaR1C1 = _
"=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
Range("AU2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-36],'Completo - CC_Dados'!C[-46]:C[-38],9,0)"
Range("AV2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-37],'Completo - CC_Dados'!C[-47]:C[-45],3,0)"
Range("AW2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],'Completo - CC_Dados'!C[-46]:C[-44],3,0)"
Range("AX2").Select
ActiveCell.FormulaR1C1 = "=LEFT(RC[-2],2)"
Range("AY2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],'Completo - CC_Dados'!C[-48]:C[-46],3,0)"
Range("AZ2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>2,LEFT(RC48,5),"""")"
Range("BA2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BB2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>5,LEFT(RC[-6],8),"""")"
Range("BC2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BD2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(LEN(RC48)>8,RC3=""Investimentos"",RC47=""Institucional_Projetos""),LEFT(RC48,12),IF(AND(LEN(RC48)>8,RC3=""Investimentos"",RC47<>""Institucional_Projetos""),LEFT(RC48,11),IF(AND(LEN(RC48)>8,RC3<>""Investimentos""),LEFT(RC48,11),"""")))"
Range("BE2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BF2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-52]=""Investimentos"","""",IF(LEN(RC48)>11,LEFT(RC48,14),""""))"
Range("BG2").Select
ActiveCell.FormulaR1C1 = _
"=IF(IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))="""",RC[-1],IFERROR(VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0),RC[-1]))"
Range("BH2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>14,LEFT(RC48,17),"""")"
Range("BI2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BJ2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>17,LEFT(RC48,20),"""")"
Range("BK2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BL2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>20,LEFT(RC48,23),"""")"
Range("BM2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BN2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>23,LEFT(RC48,26),"""")"
Range("BO2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BP2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>26,LEFT(RC48,29),"""")"
Range("BQ2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BR2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(RC48)>29,LEFT(RC48,32),"""")"
Range("BS2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
Range("BT2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-61],'Completo - CC_Dados'!C[-71]:C[-20],49,0)"
Range("BU2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-62],'Completo - CC_Dados'!C[-72]:C[-21],50,0)"
Range("BW2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-64],'Completo - CC_Dados'!C[-74]:C[-23],52,0)"
Range("BX2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-65],'Completo - CC_Dados'!C1:C11,11,0)"
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("L2:BU2").AutoFill Range("L2:BU2").Resize(LastRow)
Range("BW2:BX2").AutoFill Range("BW2:BX2").Resize(LastRow)
Range("B2").Select
ActiveCell.FormulaR1C1 = "=DATE(YEAR(RC[3]),MONTH(RC[3]),1)"
Range("C2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[8],'Completo - CC_Dados'!C[-2]:C[9],12,0)"
Range("D2").Select
ActiveCell.FormulaR1C1 = _
"=IF(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)<>""GRUPO DRE"",VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0),IF(AND(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""IDTVM_Asset"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS"",IF(AND(VLOOKUP(RC[2],PLANO_DE_CON" & _
"TAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""Inter Seguros"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS"",IF(AND(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""Marketplace"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS""" & _
",IF(AND(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""DLM"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS"",""GRUPO DRE"")))))" & _
""
Range("B2:D2").AutoFill Range("B2:D2").Resize(LastRow)
Application.ScreenUpdating = True
End Sub
I tried looking up a way to do this but failed. I know it would be some kind of conditional, but have no idea on how to do it the cleanest and fastest way.
EDIT 1
Made more research and came to one solution, removed all the selects in the loop as suggested in comments but it's taking too long to run.
If you guys could help me with more advanced techniques to do the same thing, I would be really grateful.
Here's the new code:
Sub Calculos_BD_Criterio_Mes() '
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Dim linha As Long
Dim ws As Worksheet
Dim rng As Range
Set ws = Worksheets("InterExpenses_BD")
Set rng = ws.Cells(1, 1)
Range("B2").Select
ActiveCell.FormulaR1C1 = "=DATE(YEAR(RC[3]),MONTH(RC[3]),1)"
Range("C2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[8],'Completo - CC_Dados'!C[-2]:C[9],12,0)"
Range("D2").Select
ActiveCell.FormulaR1C1 = _
"=IF(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)<>""GRUPO DRE"",VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0),IF(AND(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""IDTVM_Asset"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS"",IF(AND(VLOOKUP(RC[2],PLANO_DE_CON" & _
"TAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""Inter Seguros"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS"",IF(AND(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""Marketplace"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS""" & _
",IF(AND(VLOOKUP(RC[2],PLANO_DE_CONTAS_Analítico!C[-3]:C[13],17,0)=""GRUPO DRE"",(VLOOKUP(RC[7],'Completo - CC_Dados'!C[-3]:C[5],9,0)=""DLM"")),""OUTRAS DESPESAS OPERACIONAIS/NÃO OPERACIONAIS"",""GRUPO DRE"")))))" & _
""
Range("BY2").Select
ActiveCell.FormulaR1C1 = "=MONTH(RC[-75])"
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("B2:D2").AutoFill Range("B2:D2").Resize(LastRow)
Range("BY2").AutoFill Range("BY2").Resize(LastRow)
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
linha = 2
While Cells(linha, 1) <> ""
If Cells(linha, 77) >= 3 Then
' Fórmulas de L até AT
Range(Cells(linha, 12), Cells(linha, 46)).FormulaR1C1 = "=INDEX('Completo - CC_Dados'!R2C14:R1698C48,MATCH(InterExpenses_BD!RC11,'Completo - CC_Dados'!R2C1:R1698C1,0),MATCH(InterExpenses_BD!R1C,'Completo - CC_Dados'!R1C14:R1C48,0))*InterExpenses_BD!RC10"
' Fórmula AU
Cells(linha, 47).FormulaR1C1 = "=VLOOKUP(RC[-36],'Completo - CC_Dados'!C[-46]:C[-38],9,0)"
' Fórmula AV
Cells(linha, 48).FormulaR1C1 = "=VLOOKUP(RC[-37],'Completo - CC_Dados'!C[-47]:C[-45],3,0)"
' Fórmula AW
Cells(linha, 49).FormulaR1C1 = "=VLOOKUP(RC[-1],'Completo - CC_Dados'!C[-46]:C[-44],3,0)"
' Fórmula AX
Cells(linha, 50).FormulaR1C1 = "=LEFT(RC[-2],2)"
' Fórmula AY
Cells(linha, 51).FormulaR1C1 = "=VLOOKUP(RC[-1],'Completo - CC_Dados'!C[-48]:C[-46],3,0)"
' Fórmula AZ
Cells(linha, 52).FormulaR1C1 = "=IF(LEN(RC48)>2,LEFT(RC48,5),"""")"
' Fórmula BA
Cells(linha, 53).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BB
Cells(linha, 54).FormulaR1C1 = "=IF(LEN(RC48)>5,LEFT(RC[-6],8),"""")"
' Fórmula BC
Cells(linha, 55).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BD
Cells(linha, 56).FormulaR1C1 = "=IF(AND(LEN(RC48)>8,RC3=""Investimentos"",RC47=""Institucional_Projetos""),LEFT(RC48,12),IF(AND(LEN(RC48)>8,RC3=""Investimentos"",RC47<>""Institucional_Projetos""),LEFT(RC48,11),IF(AND(LEN(RC48)>8,RC3<>""Investimentos""),LEFT(RC48,11),"""")))"
' Fórmula BE
Cells(linha, 57).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BF
Cells(linha, 58).FormulaR1C1 = "=IF(RC[-52]=""Investimentos"","""",IF(LEN(RC48)>11,LEFT(RC48,14),""""))"
' Fórmula BG
Cells(linha, 59).FormulaR1C1 = "=IF(IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))="""",RC[-1],IFERROR(VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0),RC[-1]))"
' Fórmula BH
Cells(linha, 60).FormulaR1C1 = "=IF(LEN(RC48)>14,LEFT(RC48,17),"""")"
' Fórmula BI
Cells(linha, 61).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BJ
Cells(linha, 62).FormulaR1C1 = "=IF(LEN(RC48)>17,LEFT(RC48,20),"""")"
' Fórmula BK
Cells(linha, 63).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BL
Cells(linha, 64).FormulaR1C1 = "=IF(LEN(RC48)>20,LEFT(RC48,23),"""")"
' Fórmula BM
Cells(linha, 65).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BN
Cells(linha, 66).FormulaR1C1 = "=IF(LEN(RC48)>23,LEFT(RC48,26),"""")"
' Fórmula BO
Cells(linha, 67).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BP
Cells(linha, 68).FormulaR1C1 = "=IF(LEN(RC48)>26,LEFT(RC48,29),"""")"
' Fórmula BQ
Cells(linha, 69).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BR
Cells(linha, 70).FormulaR1C1 = "=IF(LEN(RC48)>29,LEFT(RC48,32),"""")"
' Fórmula BS
Cells(linha, 71).FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],'Completo - CC_Dados'!C3:C5,3,0))"
' Fórmula BT
Cells(linha, 72).FormulaR1C1 = "=VLOOKUP(RC[-61],'Completo - CC_Dados'!C[-71]:C[-20],49,0)"
' Fórmula BU
Cells(linha, 73).FormulaR1C1 = "=VLOOKUP(RC[-62],'Completo - CC_Dados'!C[-72]:C[-21],50,0)"
' Fórmula BX
Cells(linha, 76).FormulaR1C1 = "=VLOOKUP(RC[-65],'Completo - CC_Dados'!C1:C11,11,0)"
End If
linha = linha + 1
Wend
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
End Sub
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|