This page explains how to find a mark input cells that do not have dependents and how to mark and colour cells that go to another sheet. I describe how to make a macro that works through rows and columns in an input sheet and find items that are not used by the model using the ShowDependent item in VBA. Finding cells with no dependents is a little tricky because when you try and use the .dependents statement in VBA, it only finds the dependents in one sheet. I though this would be something that you should easily find on the internet, but I could not because of looking in different sheets. The method that I came up may be a bit crude. It uses the “ShowDependents” statement in VBA. When you create a blue arrow it is counted as a shape. If there is a blue arrow then there is a dependent. The problem is that as you work through cells, you need to re-set the number of shapes so you can design a test.
Finding Cells with No Dependents
I have put code for finding input cells that do not have a dependent in the generic macros file and also in a separate file with a focused example. The code that I use is shown below with various comments that hopefully illustrate the logic. I have attached a file with the code for finding the dependent cells below. The screenshot illustrates a simple example. I begin by counting the number of shapes so that you can later delete the shapes created by the ShowDependents. Some of the cells have dependents in the same page. Other inputs have dependents in other cells. The cells without dependents are coloured in yellow. You can be safe in deleting these cells without causing any #REF problems. The screenshot below illustrates results of the transferred variables. The variables in purple are cells that are cells that are stuck out there and have no uses anywhere in the workbook. You can see how this works by pressing the button named “Find Cells with No Dependents.” The video below the screenshot explains how the create the macro and the code at the bottom demonstrates the code itself.
Finding Transferred Variables
The screenshot below illustrates results of the transferred variables. The variables in purple are cells that are transferred outside of the sheet to a different sheet. You can see how this works by pressing the button named “File Transfers.” The video below the screenshot explains how the create the macro and the code at the bottom demonstrates the code itself.
Code for Finding Inputs with No Dependents
.
' ---------------------------------------------------------------------------------------------------------- ' This finds the INPUT cells with NO DEPENDENTS ' You can find the number of dependents including dependents that go to another sheet ' This is done with the .showdependents extension ' To implement this you can first find the shapes that were in the sheet before you run the macro ' Then, you can find the added shapes from arrows associated with dependents ' If the total shapes is zero than colour the cell ' You can use RGB for the colours with range names ' ' Loop around rows and columns like other files ' ---------------------------------------------------------------------------------------------------------- Sub cells_no_dependents() Dim shp As Shape, start_row, start_col, end_row, end_col As Single ' Clear Existing Cells clear_sheet ' Clear the formatting macro ActiveSheet.ClearArrows Application.ScreenUpdating = False calculation_status = Application.Calculation Application.Calculation = xlCalculationManual ' Find the number of shapes that you do not want to delete (New shapes from dependent lines will be deleted) shape_number = 0 For Each shp In ActiveSheet.Shapes shape_number = shape_number + 1 Next shp Start_Shape = shape_number ' Loop around rows and columns like other files For col = Range("col_start") To Range("col_end") ' First go around the columns For Row = Range("row_start") To Range("row_end") ' Go around rows and columns ' Skip items that are not fixed numbers so the program works much faster If WorksheetFunction.IsFormula(Cells(Row, col)) = True Then GoTo Finish_Loop: If WorksheetFunction.IsText(Cells(Row, col)) = True Then GoTo Finish_Loop: If WorksheetFunction.IsError(Cells(Row, col)) = True Then GoTo Finish_Loop: If WorksheetFunction.IsNumber(Cells(Row, col)) = False Then GoTo Finish_Loop: ActiveSheet.ClearArrows ' The show dependents for each cell; creates arrows that you can count Cells(Row, col).ShowDependents ' This creates additional shapes; there is no error if no dependents ' The shape count has been reset; this counts the total amount of shapes including all of the lines from the show precedent ShapeCount = ActiveSheet.Shapes.Count If Range("slow") Then Application.Wait (Now + 0.000008) ' Wait to show the arrows If Start_Shape = ShapeCount Then GoTo no_dependent: ' Skip over everything if no arrows and the number of shapes ' Delete the added sheets to re-start with the next cell For Shape = ShapeCount To Start_Shape + 1 Step -1 ' Delete additional shapes for next go around On Error Resume Next ActiveSheet.Shapes(Shape).Delete Next Shape On Error GoTo 0 ' Re-start the error checking ' Now compute the sheet dependents to find situations on other sheets GoTo Finish_Loop: ' Skip when found dependent no_dependent: ' Comes here when no arrows found Cells(Row, col).Interior.Color = RGB(Range("Red"), Range("Green"), Range("Blue")) ' Colour the cell with no dependent Cells(Row, col).Font.Color = RGB(0, 0, 0) ' colour font of cell with no dependent ' Cells(Row, col).Font.Bold = True Finish_Loop: Next Row Next col End Sub
Code for Finding Equations and Inputs Transferred to Other Sheets
' ---------------------------------------------------------------------------------------------------------- ' This finds the transfers to other sheets ' You can find the number of dependents including dependents that go to another sheet ' You can also find the number of dependents that only go to the same sheet ' The difference between these two number is the number of dependents that go to another sheet ' ' You can find the total number of shapes with the .showdependents extension ' You can find the dependents in the current sheet with the .dependents extension ' ' Loop around rows and columns like other files ' ---------------------------------------------------------------------------------------------------------- Sub transfer_colour() Dim shp As Shape, start_row, start_col, end_row, end_col As Single Application.ScreenUpdating = False calculation_status = Application.Calculation Application.Calculation = xlCalculationManual ' Clear Existing Cells clear_sheet ' Another macro that re-sets the sheet ActiveSheet.ClearArrows ' Clear all the blue arrows current_cell = ActiveCell.Address ' So you can go back to the current cell ' Find the number of shapes that you do not want to delete (New shapes from dependent lines will be deleted) shape_number = 0 ' This will count the number of shapes in the sheet For Each shp In ActiveSheet.Shapes shape_number = shape_number + 1 Next shp Start_Shape = shape_number ' after counting the shapes find the initial shape number ' ---------------------------------------------------------------------------------------------------------- ' Loop around rows and columns like other files ' In generic macros, you can ' ---------------------------------------------------------------------------------------------------------- For col = Range("col_start") To Range("col_end") ' First go around the columns For Row = Range("row_start") To Range("row_end") ' Go around rows and columns Range("C1") = col ' print the column number that will change as you go around Range("C2") = Row ' print the row number that will change as you go around ' Skip items that are not fixed numbers If WorksheetFunction.IsText(Cells(Row, col)) = True Then GoTo finish_the_calculations: If WorksheetFunction.IsError(Cells(Row, col)) = True Then GoTo finish_the_calculations: If WorksheetFunction.IsNumber(Cells(Row, col)) = False Then GoTo finish_the_calculations: ' ---------------------------------------------------------------------------------------------------------- ' This is the first section that finds the number of arrows that go to all sheets ' You can count the number of arrows to find the number of dependents ' Then, you can finde the cells that have no dependents as the number of added shapes will be zero ' ---------------------------------------------------------------------------------------------------------- ActiveSheet.ClearArrows ' Start by clear the arrows from dependents Cells(Row, col).ShowDependents ' This creates additional shapes; there is no error if no dependents ShapeCount = ActiveSheet.Shapes.Count ' This is the total shapes including the arrows from the dependents Dependents_All_Sheets = ShapeCount - Start_Shape ' This includes all of the sheets If Range("slow") Then Application.Wait (Now + 0.000006) ' This waits so that you can see the arrow If Start_Shape = ShapeCount Then GoTo finish_the_calculations: ' When no arrows, skip to no_dependent section For Shape = ShapeCount To Start_Shape + 1 Step -1 ' Delete additional shapes for next go around On Error Resume Next ' If there were no dependents, then this will produce an error ActiveSheet.Shapes(Shape).Delete Next Shape On Error GoTo 0 ' Re-set the error ' ---------------------------------------------------------------------------------------------------------- ' This is the second section that finds the number of dependents in the same sheet ' You count the number of dependents with the .dependents.count ' Then, you can finde the cells that have no dependents as the number of added shapes will be zero ' ---------------------------------------------------------------------------------------------------------- This_Sheet_Dependents = 0 On Error Resume Next Cells(Row, col).DirectDependents.Select ' This creates additional shapes; there is no error if no dependents This_Sheet_Dependents = Cells(Row, col).DirectDependents.Count ' This creates additional shapes; there is no error if no dependents Other_sheet_dependents = Dependents_All_Sheets - This_Sheet_Dependents ' This is the first section for total less this sheet If Other_sheet_dependents > 0 Then ' Only colour when there are some other sheet dependents Cells(Row, col).Interior.Color = RGB(Range("Red"), Range("Green"), Range("Blue")) ' Colour the cell with no dependent Cells(Row, col).Font.Color = RGB(0, 0, 0) ' colour font of cell with no dependent ' Cells(Row, col).Font.Bold = True End If GoTo finish_the_calculations: no_dependent_at_all: finish_the_calculations: Next Row Next col Range(current_cell).Select Application.Calculation = calculation_status End Sub Sub clear_sheet() Cells.Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ColorIndex = xlAutomatic .TintAndShade = 0 End With Selection.Font.Bold = False End Sub