This will keep the screen steady and improve speed as well. To avoid this turn-off screen updating at the start of the macro, and turn it back on at the end. Two ways to improve speed are: Turn off Screen UpdatingĮach time VBA interacts with Excel, the screen flutters. The For Loop is slower than the SpecialCells method, especially over large datasets. If WorksheetFunction.CountA(ws.Rows(i)) = 0 Then If there a no non-blank cells in a row, the function will return a zero, which means that the row is blank.Ĭode to delete above highlighted blank rows is as follows. We could use the Excel CountA function in VBA. Our next question is how do we determine if the row has blank or empty cells. Since our dataset may contain blank rows, the best way to find the last row is via the UsedRange technique. To loop over a dataset, we need to find the last row. Hence, while deleting rows, we will follow a bottom-to-top For Loop. This means we will effectively have skipped over the next original row whenever we delete a line via a loop.
But, because the dataset has moved up, we would move on to row 4 which is actually row 5 of the original dataset. If we are doing this via a top-to-bottom For loop, we would have deleted row 3 and would now, be moving on to the next row number. The line that was previously row number 4, is now row number 3. But, when deleting rows, we need to loop from bottom to top. The most common way to loop over a dataset is from top to bottom. This is probably the best way to use this method. SpecialCells: Delete Row if Blank Cell in ColumnĬonsider the above dataset, where we want to delete any row with a blank cell in Column D. Its much faster then the next alternative we are going to look at. So, when do we use this SpecialCells method? If you are absolutely sure that your dataset may contain blank rows, but not necessarily blank cells within a populated row, then go ahead and use this method. SpecialCells will delete the row regardless. A blank cell doesn’t necessarily mean that the entire row is blank. However, our next issue may be a deal breaker. We can use a Resume Next statement to skip over the code, if that happens. If there are no blank cells, the macro will throw a Run Time error. This brings us to our first issue with SpecialCells. The SpecialCells method returns a Range object. Ws.Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete We can use the SpecialCells method to go ahead and delete all the rows associated with a blank cell.
#EXCEL VBA ON STEP BACK IN LOOP RANGE CODE#
SpecialCells: Code to DeleteĬonsider the above dataset with the blank rows in yellow. We will just replace each select with EntireRow.Delete. But, we can even go ahead and delete the row in which each of those blank cells are located. In all these examples, we have just selected the blank cells within the specified range. Columns(1).SpecialCells(xlCellTypeBlanks).Select Range("A1:X500").SpecialCells(xlCellTypeBlanks).Select The range can be either the entire worksheet. The parameter that we are particularly interested is the xlCellTypeBlanks which returns all the blank cells within the range that we have selected. a cell or a group of cells based on the parameter that we supply to that method. SpecialCells is a Method that returns a Range object i.e.
#EXCEL VBA ON STEP BACK IN LOOP RANGE HOW TO#
We will also, look at how to delete rows when a cell within the column is blank. When using either of the two methods above, the cells in the range are being processed in the same sequence: from left to right, then from top to bottom.This tutorial will cover how to delete blank or empty rows using Excel VBA. It’s often used because, in most situations, the limits of the variable type won’t be reached. In case your process exceeded the limit of even a long variable, you will have to restructure your For-Next loop to use the “For Each element In group” convention.īut even with such limitations, this is still a very useful method.Declaring a Double variable type won’t solve the limitation.Declare a Long variable instead, so that the loop can process up to 2,147,483,648 cells, which serves most cases.Avoid declaring an Integer typing variable for this purpose because the number of cells in a worksheet is far more than 32,767.There are a few points you need to bear in mind: One limitation of this method is with the upper limit of the numeric variable being declared and used in the For-Next loop.