Slow VBA Macro

steveh8204

Board Regular
Joined
Aug 20, 2018
Messages
143
I've made a macro in vba which is taking quite a bit of time to run (approx 70 secs) and was wondering if there's any way to make it run more efficiently.

It basically just copies and pastes a couple of values, pastes them in another sheet then extracts about a dozen values, switches the sheet then pastes them values in. It then repeats this process up to 12 times.

There's a few formulas as well in the final output sheet but can't imagine these hold it up much. The macro code is below if anyone wants to have a look. Any tips on how to speed it up would be appreciated.

Thanks in advance.

VBA Code:
Sub games_batch_compare()

Range("C21").Value = "Calculating...."

Application.ScreenUpdating = False

Dim a As Variant, b As Variant, c As Variant, d As Variant, e As Variant, f As Variant, g As Variant, h As Variant
Dim i As Integer, j As Variant, k As Variant, l As Variant, m As Variant, n As Variant, o As Variant, league As Variant

' make sure selected league from top left matches "SELECT LEAGUE"

league = Range("D1")

Worksheets("SELECT LEAGUE").Select

Cells(2, 5).Value = league

Worksheets("Games").Select ' back to "Games" sheet


For i = 3 To 15

a = Cells(i, 3) ' selected Home Team into variable a
b = Cells(i, 5) ' selected Away team into variable b

If a = "" Then i = 15

Worksheets("H2H").Select

Range("L3").Value = a ' change H2H Home team to variable a
Range("S3").Value = b ' change H2H Away team to variable b
c = Range("L17") ' declare as home team goals scored
d = Range("s18") ' declare as away team Goals scored
e = Range("N17") ' declare as home team Goals conceded
f = Range("U18") ' declare as away team Goals conceded
g = Range("n46") ' declare as clean sheets home
h = Range("n52") ' declare as failed to score Home
j = Range("u47") ' declare as clean sheets away
k = Range("u53") ' declare as failed to score away
l = Range("l11") ' declare as home position Overall
m = Range("l12") ' declare as home position home
n = Range("s13") ' declare as away position away
o = Range("s11") ' declare as away position overall
p = Range("q206") ' declare as home team points last 4
q = Range("Z207") ' declare as away team points last 4

If a = "" Then c = "N/A"
If a = "" Then d = "N/A"
If a = "" Then e = "N/A"
If a = "" Then d = "N/A"
If a = "" Then f = "N/A"
If a = "" Then g = "N/A"
If a = "" Then h = "N/A"
If a = "" Then j = "N/A"
If a = "" Then k = "N/A"
If a = "" Then l = "N/A"
If a = "" Then m = "N/A"
If a = "" Then n = "N/A"
If a = "" Then o = "N/A"

Worksheets("Games").Select

Cells(i, 7).Value = c ' goals scored H
Cells(i, 8).Value = d ' goals scored A
Cells(i, 10).Value = e ' goals conceded H
Cells(i, 11).Value = f ' goals conceded A
Cells(i, 13).Value = g ' clean sheets home
Cells(i, 14).Value = h ' failed to score Home
Cells(i, 15).Value = j ' clean sheets away
Cells(i, 16).Value = k ' failed to score Away
Cells(i, 17).Value = l ' home position overall
Cells(i, 18).Value = m ' home position home
Cells(i, 19).Value = n ' away position away
Cells(i, 20).Value = o ' away position overall
Cells(i, 26).Value = p ' home team points last 4
Cells(i, 27).Value = q ' away team points last 4

Next i

Application.ScreenUpdating = True

Range("C21").Value = "Complete!"

End Sub
 
@johnnyL Your code is not cycling through the teams and is only returning the last team's values.
Most likely because the below needs to be inside the For i loop.
Entering each team's values into H2H causes H2H to update all the other values.

VBA Code:
    Sheets("H2H").Range("L3").Value = TeamsArray(i - 1, 1)              ' Solution to Pointless writing because final result is the last value of a
    Sheets("H2H").Range("S3").Value = TeamsArray(i - 1, 3)              ' Solution to Pointless writing because final result is the last value of b
 
Upvote 0

Excel Facts

Waterfall charts in Excel?
Office 365 customers have access to Waterfall charts since late 2016. They were added to Excel 2019.
Thank you @Alex Blakenburg. I was trying to go off of the original code and since I don't have examples of each sheet, The code I came up with produces the same result.
 
Upvote 0
@johnnyL Your code is not cycling through the teams and is only returning the last team's values.
Most likely because the below needs to be inside the For i loop.
Entering each team's values into H2H causes H2H to update all the other values.

@Alex Blakenburg, can you expand a little bit on that? Where in the code do the team names affect the other results? I have triple checked & I don't see where that happens.

As far as I see, the same cells are just over written in each loop.

I have compared the OP code, your code, and my code, & for the most part, all results are the same. only difference I saw was the code I submitted doesn't continue when a blank team is encountered, therefore, no later row of NA NA NA etc.

Everything else matches.

On a side note, I spotted an error in the post where you suggest putting formulas in the 2nd row of the H2H sheet. You have Q2 set to I12, which is not a formula, it should be a formula and it should be '=L12' ... not I12

So tit for tat, why do you suggest my code is wrong? Can you please explain, what I am missing? I get basically same results with my code as I do with yours. What have I messed up?
 
Upvote 0
The process is that it cycles through the sheet "Games" Column a & Column c and for each row transfers those values to the sheet H2H. H2H must have lookups / formulas in it that are not visible to us and updates all those Cells that are then transferred back to the Games sheet.

My dummy data is pretty ugly and will take up a lot of rows here, so I will send you a link to a dropbox file.
 
Upvote 0
Sorry for the late response @Alex Blakenburg. I put the code of mine that you mentioned, back into the loop, but it comes at a severe cost to completion time of the code.

The timing for my revised code that I came up with was done on both code mentioned outside the loop as well as inside the loop.

Timings for outside the loop are:
VBA Code:
' .014 avg secs with 15 rows
' .22 secs avg for 5K rows

Inside the loop:
VBA Code:
' .023 avg secs with 15 rows and Home/Away Teams rewritten
' 3.1 avg secs with 5000 rows and Home/Away Teams rewritten

Here is the revised code, I switched from the Collection method to just arrays, the timings between the two methods were very similar, I chose the array method because it was shorter code.

VBA Code:
Sub games_batch_compareV3()                                             ' .014 avg secs with 15 rows ... .22 secs avg for 5K rows
'
'                                                                       ' .023 avg secs with 15 rows and Home/Away Teams rewritten
'                                                                       ' 3.1 avg secs with 5000 rows and Home/Away Teams rewritten
'
'
    Dim startTime                   As Single
'
    startTime = Timer                                                                       ' Start the Stop watch
'
    Application.ScreenUpdating = False                                                      ' Turn ScreenUpdating off
'
    Dim a As Variant, b As Variant, c As Variant, d As Variant, e As Variant, f As Variant, g As Variant, h As Variant
    Dim i As Integer, j As Variant, k As Variant, l As Variant, m As Variant, n As Variant, o As Variant
    Dim league          As Variant
'
    Dim ArraySize                       As Long, TeamLastRow        As Long, TeamStartRow   As Long
    Dim RangeAddress                    As Range, RangeOfAddresses  As Range
    Dim GamesArray1                     As Variant, GamesArray2     As Variant, GamesArray3 As Variant, GamesArray4 As Variant, GamesArray5 As Variant
    Dim H2H_CombinedRangesArray()       As Variant, TeamsArray      As Variant
'
    TeamStartRow = 3                                                                    ' <--- Set this to the row # that the teams start on
    TeamLastRow = Sheets("Games").Range("C" & TeamStartRow).End(xlDown).Row             ' Returns Row # the teams end on
'
    ReDim GamesArray1(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray1
    ReDim GamesArray2(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray2
    ReDim GamesArray3(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray3
    ReDim GamesArray4(1 To TeamLastRow - TeamStartRow + 1, 1 To 6)                      ' Set # of rows & columns for GamesArray4
    ReDim GamesArray5(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray5
'
    TeamsArray = Sheets("Games").Range("C" & TeamStartRow & ":E" & TeamLastRow)         ' Load Teams into TeamsArray
    
''    Sheets("Games").Range("C21").Value = "Calculating...."                              ' Set Sheets("Games").Range("C21") = "Calculating...."
    Sheets("Games").Range("B21").Value = "Calculating...."                              ' Set Sheets("Games").Range("B21") = "Calculating...."
'
'   make sure selected league from top left matches "SELECT LEAGUE"
    Sheets("SELECT LEAGUE").Cells(2, 5).Value = Sheets("Games").Range("D1")             ' Sheets("SELECT LEAGUE").Range("E2") = Sheets("Games").Range("D1")
'
''    Set H2H_CombinedRangesCollection = New Collection
    Set RangeOfAddresses = Sheets("H2H").Range("L17:L17, S18:S18, N17:N17, U18:U18, N46:N46, N52:N52, U47:U47, U53:U53, L11:L11, L12:L12, S13:S13, S11:S11, Q206:Q206, Z207:Z207")
'
    For Each RangeAddress In RangeOfAddresses.Areas
        ArraySize = ArraySize + 1
        ReDim Preserve H2H_CombinedRangesArray(1 To ArraySize)
'
        H2H_CombinedRangesArray(ArraySize) = RangeAddress.Value
    Next
'
    For i = LBound(TeamsArray, 1) To UBound(TeamsArray, 1)              ' Loop through row #s 3 to Last row of Sheets("Games")
        Sheets("H2H").Range("L3").Value = TeamsArray(i, 1)                          ' Save Home Team to Sheets("H2H").Range("L3")
        Sheets("H2H").Range("S3").Value = TeamsArray(i, 3)                          ' Save Away Team to Sheets("H2H").Range("S3")
'
        GamesArray1(i, 1) = H2H_CombinedRangesArray(1)                  '   Set Sheets("Games").Range("G" & 3,4,5,etc) = c    goals scored Home
''        GamesArray1(i, 1) = TeamsArray(i, 1)                  '   Save Home Team to Sheets("H2H").Range("L3")
        GamesArray1(i, 2) = H2H_CombinedRangesArray(2)                  '   Set Sheets("Games").Range("H" & 3,4,5,etc) = d    goals scored Away
'
        GamesArray2(i, 1) = H2H_CombinedRangesArray(3)                  '   Set Sheets("Games").Range("J" & 3,4,5,etc) = e    goals conceded Home
        GamesArray2(i, 2) = H2H_CombinedRangesArray(4)                  '   Set Sheets("Games").Range("K" & 3,4,5,etc) = f    goals conceded Away
'
        GamesArray3(i, 1) = H2H_CombinedRangesArray(5)                  '   Set Sheets("Games").Range("M" & 3,4,5,etc) = g    clean sheets home
        GamesArray3(i, 2) = H2H_CombinedRangesArray(6)                  '   Set Sheets("Games").Range("N" & 3,4,5,etc) = h    failed to score Home
'
        GamesArray4(i, 1) = H2H_CombinedRangesArray(7)                  '   Set Sheets("Games").Range("O" & 3,4,5,etc) = j    clean sheets away
        GamesArray4(i, 2) = H2H_CombinedRangesArray(8)                  '   Set Sheets("Games").Range("P" & 3,4,5,etc) = k    failed to score Away
        GamesArray4(i, 3) = H2H_CombinedRangesArray(9)                  '   Set Sheets("Games").Range("Q" & 3,4,5,etc) = l    home position overall
        GamesArray4(i, 4) = H2H_CombinedRangesArray(10)                 '   Set Sheets("Games").Range("R" & 3,4,5,etc) = m    home position home
        GamesArray4(i, 5) = H2H_CombinedRangesArray(11)                 '   Set Sheets("Games").Range("S" & 3,4,5,etc) = n    away position away
''        GamesArray4(i, 5) = TeamsArray(i, 3)                 '   Save Away Team to Sheets("H2H").Range("S3")
        GamesArray4(i, 6) = H2H_CombinedRangesArray(12)                 '   Set Sheets("Games").Range("T" & 3,4,5,etc) = o    away position overall
'
        GamesArray5(i, 1) = H2H_CombinedRangesArray(13)                 '   Set Sheets("Games").Range("Z" & 3,4,5,etc) = p    home team points last 4
        GamesArray5(i, 2) = H2H_CombinedRangesArray(14)                 '   Set Sheets("Games").Range("AA" & 3,4,5,etc) = q   away team points last 4
    Next                                                                ' Loop back
'
''    Sheets("H2H").Range("L3").Value = TeamsArray(i, 1)                          ' Save Home Team to Sheets("H2H").Range("L3")
''    Sheets("H2H").Range("S3").Value = TeamsArray(i, 3)                          ' Save Away Team to Sheets("H2H").Range("S3")
'
    Sheets("Games").Range("G" & TeamStartRow & ":H" & TeamLastRow) = GamesArray1    ' Display results of GamesArray1
    Sheets("Games").Range("J" & TeamStartRow & ":K" & TeamLastRow) = GamesArray2    ' Display results of GamesArray2
    Sheets("Games").Range("M" & TeamStartRow & ":N" & TeamLastRow) = GamesArray3    ' Display results of GamesArray3
    Sheets("Games").Range("O" & TeamStartRow & ":T" & TeamLastRow) = GamesArray4    ' Display results of GamesArray4
    Sheets("Games").Range("Z" & TeamStartRow & ":AA" & TeamLastRow) = GamesArray5   ' Display results of GamesArray5

''    Sheets("Games").Range("C21").Value = "Complete!"                                ' Sheets("Games").Range("C21") = "Complete!"
    Sheets("Games").Range("B21").Value = "Complete!"                                ' Sheets("Games").Range("B21") = "Complete!"
'
    Application.ScreenUpdating = True                                               ' Turn ScreenUpdating back on
'
    Debug.Print "Time to complete games_batch_compareV3 = " & Timer - startTime & " seconds."             ' Display the time elapsed to the user (Ctrl-G)
End Sub

It would be nice if the OP @steveh8204 could respond and attest to the significance of the Home/Away teams being written to the 'H2H' sheet. If that writing to the 'H2H' sheet is used in other formulas, if we knew what they were, we could eliminate the numerous writing of the teams to the 'H2H' sheet and therefore speed up the program time even more.
 
Upvote 0
Sorry for the late response @Alex Blakenburg. I put the code of mine that you mentioned, back into the loop, but it comes at a severe cost to completion time of the code.

The timing for my revised code that I came up with was done on both code mentioned outside the loop as well as inside the loop.

Timings for outside the loop are:
VBA Code:
' .014 avg secs with 15 rows
' .22 secs avg for 5K rows

Inside the loop:
VBA Code:
' .023 avg secs with 15 rows and Home/Away Teams rewritten
' 3.1 avg secs with 5000 rows and Home/Away Teams rewritten

Here is the revised code, I switched from the Collection method to just arrays, the timings between the two methods were very similar, I chose the array method because it was shorter code.

VBA Code:
Sub games_batch_compareV3()                                             ' .014 avg secs with 15 rows ... .22 secs avg for 5K rows
'
'                                                                       ' .023 avg secs with 15 rows and Home/Away Teams rewritten
'                                                                       ' 3.1 avg secs with 5000 rows and Home/Away Teams rewritten
'
'
    Dim startTime                   As Single
'
    startTime = Timer                                                                       ' Start the Stop watch
'
    Application.ScreenUpdating = False                                                      ' Turn ScreenUpdating off
'
    Dim a As Variant, b As Variant, c As Variant, d As Variant, e As Variant, f As Variant, g As Variant, h As Variant
    Dim i As Integer, j As Variant, k As Variant, l As Variant, m As Variant, n As Variant, o As Variant
    Dim league          As Variant
'
    Dim ArraySize                       As Long, TeamLastRow        As Long, TeamStartRow   As Long
    Dim RangeAddress                    As Range, RangeOfAddresses  As Range
    Dim GamesArray1                     As Variant, GamesArray2     As Variant, GamesArray3 As Variant, GamesArray4 As Variant, GamesArray5 As Variant
    Dim H2H_CombinedRangesArray()       As Variant, TeamsArray      As Variant
'
    TeamStartRow = 3                                                                    ' <--- Set this to the row # that the teams start on
    TeamLastRow = Sheets("Games").Range("C" & TeamStartRow).End(xlDown).Row             ' Returns Row # the teams end on
'
    ReDim GamesArray1(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray1
    ReDim GamesArray2(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray2
    ReDim GamesArray3(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray3
    ReDim GamesArray4(1 To TeamLastRow - TeamStartRow + 1, 1 To 6)                      ' Set # of rows & columns for GamesArray4
    ReDim GamesArray5(1 To TeamLastRow - TeamStartRow + 1, 1 To 2)                      ' Set # of rows & columns for GamesArray5
'
    TeamsArray = Sheets("Games").Range("C" & TeamStartRow & ":E" & TeamLastRow)         ' Load Teams into TeamsArray
   
''    Sheets("Games").Range("C21").Value = "Calculating...."                              ' Set Sheets("Games").Range("C21") = "Calculating...."
    Sheets("Games").Range("B21").Value = "Calculating...."                              ' Set Sheets("Games").Range("B21") = "Calculating...."
'
'   make sure selected league from top left matches "SELECT LEAGUE"
    Sheets("SELECT LEAGUE").Cells(2, 5).Value = Sheets("Games").Range("D1")             ' Sheets("SELECT LEAGUE").Range("E2") = Sheets("Games").Range("D1")
'
''    Set H2H_CombinedRangesCollection = New Collection
    Set RangeOfAddresses = Sheets("H2H").Range("L17:L17, S18:S18, N17:N17, U18:U18, N46:N46, N52:N52, U47:U47, U53:U53, L11:L11, L12:L12, S13:S13, S11:S11, Q206:Q206, Z207:Z207")
'
    For Each RangeAddress In RangeOfAddresses.Areas
        ArraySize = ArraySize + 1
        ReDim Preserve H2H_CombinedRangesArray(1 To ArraySize)
'
        H2H_CombinedRangesArray(ArraySize) = RangeAddress.Value
    Next
'
    For i = LBound(TeamsArray, 1) To UBound(TeamsArray, 1)              ' Loop through row #s 3 to Last row of Sheets("Games")
        Sheets("H2H").Range("L3").Value = TeamsArray(i, 1)                          ' Save Home Team to Sheets("H2H").Range("L3")
        Sheets("H2H").Range("S3").Value = TeamsArray(i, 3)                          ' Save Away Team to Sheets("H2H").Range("S3")
'
        GamesArray1(i, 1) = H2H_CombinedRangesArray(1)                  '   Set Sheets("Games").Range("G" & 3,4,5,etc) = c    goals scored Home
''        GamesArray1(i, 1) = TeamsArray(i, 1)                  '   Save Home Team to Sheets("H2H").Range("L3")
        GamesArray1(i, 2) = H2H_CombinedRangesArray(2)                  '   Set Sheets("Games").Range("H" & 3,4,5,etc) = d    goals scored Away
'
        GamesArray2(i, 1) = H2H_CombinedRangesArray(3)                  '   Set Sheets("Games").Range("J" & 3,4,5,etc) = e    goals conceded Home
        GamesArray2(i, 2) = H2H_CombinedRangesArray(4)                  '   Set Sheets("Games").Range("K" & 3,4,5,etc) = f    goals conceded Away
'
        GamesArray3(i, 1) = H2H_CombinedRangesArray(5)                  '   Set Sheets("Games").Range("M" & 3,4,5,etc) = g    clean sheets home
        GamesArray3(i, 2) = H2H_CombinedRangesArray(6)                  '   Set Sheets("Games").Range("N" & 3,4,5,etc) = h    failed to score Home
'
        GamesArray4(i, 1) = H2H_CombinedRangesArray(7)                  '   Set Sheets("Games").Range("O" & 3,4,5,etc) = j    clean sheets away
        GamesArray4(i, 2) = H2H_CombinedRangesArray(8)                  '   Set Sheets("Games").Range("P" & 3,4,5,etc) = k    failed to score Away
        GamesArray4(i, 3) = H2H_CombinedRangesArray(9)                  '   Set Sheets("Games").Range("Q" & 3,4,5,etc) = l    home position overall
        GamesArray4(i, 4) = H2H_CombinedRangesArray(10)                 '   Set Sheets("Games").Range("R" & 3,4,5,etc) = m    home position home
        GamesArray4(i, 5) = H2H_CombinedRangesArray(11)                 '   Set Sheets("Games").Range("S" & 3,4,5,etc) = n    away position away
''        GamesArray4(i, 5) = TeamsArray(i, 3)                 '   Save Away Team to Sheets("H2H").Range("S3")
        GamesArray4(i, 6) = H2H_CombinedRangesArray(12)                 '   Set Sheets("Games").Range("T" & 3,4,5,etc) = o    away position overall
'
        GamesArray5(i, 1) = H2H_CombinedRangesArray(13)                 '   Set Sheets("Games").Range("Z" & 3,4,5,etc) = p    home team points last 4
        GamesArray5(i, 2) = H2H_CombinedRangesArray(14)                 '   Set Sheets("Games").Range("AA" & 3,4,5,etc) = q   away team points last 4
    Next                                                                ' Loop back
'
''    Sheets("H2H").Range("L3").Value = TeamsArray(i, 1)                          ' Save Home Team to Sheets("H2H").Range("L3")
''    Sheets("H2H").Range("S3").Value = TeamsArray(i, 3)                          ' Save Away Team to Sheets("H2H").Range("S3")
'
    Sheets("Games").Range("G" & TeamStartRow & ":H" & TeamLastRow) = GamesArray1    ' Display results of GamesArray1
    Sheets("Games").Range("J" & TeamStartRow & ":K" & TeamLastRow) = GamesArray2    ' Display results of GamesArray2
    Sheets("Games").Range("M" & TeamStartRow & ":N" & TeamLastRow) = GamesArray3    ' Display results of GamesArray3
    Sheets("Games").Range("O" & TeamStartRow & ":T" & TeamLastRow) = GamesArray4    ' Display results of GamesArray4
    Sheets("Games").Range("Z" & TeamStartRow & ":AA" & TeamLastRow) = GamesArray5   ' Display results of GamesArray5

''    Sheets("Games").Range("C21").Value = "Complete!"                                ' Sheets("Games").Range("C21") = "Complete!"
    Sheets("Games").Range("B21").Value = "Complete!"                                ' Sheets("Games").Range("B21") = "Complete!"
'
    Application.ScreenUpdating = True                                               ' Turn ScreenUpdating back on
'
    Debug.Print "Time to complete games_batch_compareV3 = " & Timer - startTime & " seconds."             ' Display the time elapsed to the user (Ctrl-G)
End Sub

It would be nice if the OP @steveh8204 could respond and attest to the significance of the Home/Away teams being written to the 'H2H' sheet. If that writing to the 'H2H' sheet is used in other formulas, if we knew what they were, we could eliminate the numerous writing of the teams to the 'H2H' sheet and therefore speed up the program time even more.
Hi, sorry I haven't been on, been working and stuff. Basically every time the two teams are changed all the information in 'H2H' changes, all the data in H2H is derived from formulas and lookups of which I don't fully understand. Some from a different worksheet in the same workbook which is bizarrely blank. An external sheet is also used somewhere to add to the confusion.

If you want to have a look for yourselves the original workbook is in the first link below, the data required to run in the background is the second link.

Workbook for data

external data

I have heavily modified the workbook from the first link to make the data more 'friendly on the eyes' and this is were the macros I've originally asked about are from.
 
Upvote 0
Those links you posted are to websites with multiple links.

Can you upload versions of what you are using now? You can change any data that you might consider 'sensitive data'. Speaking for myself, I don't want to waste time looking through files that are different than what you have.
 
Upvote 0
Ok, this is the file, this is the data file that needs to run in the background (do not rename). The file isn't a Macro Enable workbook so I've always run it from my Personal.xlsb. The macros needed are in this file.

This is the folder in case the links don't work.
 
Upvote 0
Ok. I will check it out after I finish up what I am currently working on.
 
Upvote 0

Forum statistics

Threads
1,215,906
Messages
6,127,664
Members
449,397
Latest member
Bastbog

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top