Enforcing Moving Cells Up

Written by Allen Wyatt (last updated June 28, 2025)
This tip applies to Excel 2007, 2010, 2013, 2016, 2019, 2021, 2024, and Excel in Microsoft 365


1

Chris has, at work, a big worksheet that includes several macros. One of these deletes a block of cells and moves the rest up. Sometimes, though, users will not use the macro and, instead, manually delete the block. It is a disaster if the deletion moves cells to the left instead of up. Chris wonders if there is a way to use the macros to enforce the upward moving of cells and preclude the manual movement of cells to the left.

As with many things in Excel, there are multiple ways that you can approach this problem. I cannot go too deep into specifics here, as any approach ultimately selected will depend on the nature of the information in the worksheet and what you want to allow or disallow. The following sections, however, may provide the key that you need to pick the approach that is best for you.

Protect the Worksheet

A simple (and effective) approach is to design your worksheet so it can be protected. Of course, you would make sure that any cells where the user should enter information are unprotected, but otherwise your macro can make sure that when the worksheet is activated, it is protected. This precludes the possibility of the user manually deleting any cells from the worksheet.

This means that if the range of cells does need to be deleted, the user is forced (by the protection) to select your macro for deletion. The macro can then unprotect the worksheet, delete the range of cells, and reprotect it.

Intercepting Deletes

Another macro-based approach is to work with the BeforeDelete event to control what actually happens. The following is a simple event handler that could be the basis of what you actually use:

Private Sub Worksheet_BeforeDelete()
    Dim delRng As Range
    Dim selRng As Range

    On Error Resume Next
    Set delRng = Range("C2:D5")  ' Change the range to the block
                                 ' of cells to be deleted (manually
                                 ' or by macro)
    Set selRng = Application.Selection  ' Cells selected manually
                                        ' by the user
    If MyRng.Address = delRng.Address Then
        Selection.Delete shift:=xlUp
    End If
End Sub

The event handler simply compares the range you want to have deleted only upwards with the range the user selected to delete. If the ranges are the same, then the handler deletes the range and moves it up. You would need to, obviously, change the range assigned to the delRng variable to match the range you want to monitor.

Remapping the Delete Key

Speaking of deleting, you could also remap the Delete key so that it does whatever you want. All you need to do is to include a macro like the following in the ThisWorkbook code module:

Private Sub Workbook_Open()
    Application.OnKey "{DELETE}", "MyMacro()"
End Sub

This means that when the workbook is opened, the Delete key is remapped so that whenever it is pressed, MyMacro (change this to whatever macro you desire) is automatically run.

Note that this approach affects only the pressing of the Delete key; it does not affect deletions done in any other way. For those, your macros would still need to anticipate and handle the logic.

The Complete Approach

That brings us to the complete approach. This approach simply means making a list of all the various ways that the user could initiate a deletion and then intercepting those ways. The list (and the interceptions) would necessarily need to include some of the approaches already discussed, such as handling the Delete key. You would also need to figure out how to disable or modify what happens when the user right-clicks or when the user selects a delete option from the ribbon. (You might even want to remove deletion-related options from the user interface.)

This approach can be quite long, as an exhaustive list of deletion methods could be laborious to put together and handle.

Note:

If you would like to know how to use the macros described on this page (or on any other page on the ExcelTips sites), I've prepared a special page that includes helpful information. Click here to open that special page in a new browser tab.

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (13632) applies to Microsoft Excel 2007, 2010, 2013, 2016, 2019, 2021, 2024, and Excel in Microsoft 365.

Author Bio

Allen Wyatt

With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He is president of Sharon Parq Associates, a computer and publishing services company. ...

MORE FROM ALLEN

Not All Rows are Filtered

When you are working with large amounts of data in a worksheet, filtering that data can make the process much simpler. ...

Discover More

Positioning Headers and Footers

Headers and footers can add a finishing touch to your printed documents. Here's how you can position those headers and ...

Discover More

Sorting Dates by Month

Sorting by dates is easy, and you end up with a list that is in chronological order. However, things become a bit more ...

Discover More

Create Custom Apps with VBA! Discover how to extend the capabilities of Office 365 applications with VBA programming. Written in clear terms and understandable language, the book includes systematic tutorials and contains both intermediate and advanced content for experienced VB developers. Designed to be comprehensive, the book addresses not just one Office application, but the entire Office suite. Check out Mastering VBA for Microsoft Office 365 today!

More ExcelTips (ribbon)

Calling a Macro from the Workbook_Open Event

You can run a Personal.xlsb macro from within your Workbook_Open code, but you may get an error if you don't make sure ...

Discover More

Clean Up Your Macro List

Got a workbook cluttered with all sorts of macros? Delete them and you'll make your workbook easier to manage.

Discover More

Converting HSL to RGB

When working with colors in Excel you can specify them using either RGB or HSL values. Converting from HSL to RGB can be ...

Discover More
Subscribe

FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."

View most recent newsletter.

Comments

If you would like to add an image to your comment (not an avatar, but an image to help in making the point of your comment), include the characters [{fig}] (all 7 characters, in the sequence shown) in your comment text. You’ll be prompted to upload your image when you submit the comment. Maximum image size is 6Mpixels. Images larger than 600px wide or 1000px tall will be reduced. Up to three images may be included in a comment. All images are subject to review. Commenting privileges may be curtailed if inappropriate images are posted.

What is 9 + 8?

2025-06-30 14:10:24

J. Woolley

Re. Intercepting Deletes, the Tip's Worksheet_BeforeDelete macro does not function as intended because the BeforeDelete event occurs before deletion of the worksheet, not before deletion of a range of cells.
Re. Remapping the Delete Key, the Tip's Workbook_Open macro should reference "MyMacro" instead of "MyMacro()" because the procedure's name must not include parentheses. To restore normal function of the Delete key, use
    Application.OnKey "{DELETE}"
without a 2nd argument.


This Site

Got a version of Excel that uses the ribbon interface (Excel 2007 or later)? This site is for you! If you use an earlier version of Excel, visit our ExcelTips site focusing on the menu interface.

Newest Tips
Subscribe

FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."

(Your e-mail address is not shared with anyone, ever.)

View the most recent newsletter.