Moin,
wenn Du flexibel mit Deinem Tabellenaufbau bist - um so besser 
Es ist oft von Vorteil ein paar Zeilen mehr oben frei zu haben für Überschriften, Einheitenzeilen, Erklärungen, Schaltflächen usw.
Die freien Spalten links stören auch kaum. Du kannst sie ja ausblenden oder ganz schmal machen ( dann werden sie auch nicht immer wieder durch das 2. Makro aufgepoppt ).
Natürlich sind meine Umgrenzungen für den Datenbereich festgelegt sowie auch die Steuerzeile und -spalte mit den "x"en als Nicht-Ausblend-Markierung.
Das geschieht aber im Code durch Werte, die in Variablen geschrieben werden.
Hast Du Dir die vorhandenen Kommentare angesehen? Da ist schon eine Menge erklärt. Ich schreibe Dir aber noch ´was dazu:
Option Explicit
'Kann weg, brauchst Du nicht 'Dim AR As Long: Dim AC As Long 'activecell.row + .column
Dim LR As Long: Dim LC As Long ‚ActiveCell.SpecialCells(xlLastCell).Row+ .column
Dim R1 As Integer: Dim C1 As Integer ‚1.DatenZeile und -Spalte
Dim R0 As Integer: Dim i As Long ’ R0=Zeile mit AusBlendMarkierungen‘
Dim C0 As Integer: ’ C0=Zeile mit AusBlendMarkierungen‘
'Kann weg, brauchst Du nichtDim Modus As Boolean
'Kann weg, brauchst Du nicht Dim bolSperre As Variant
Sub selektiv_ausblenden()
R1 = 9 'Überschriften usw. NUR OBERHALB Zeile 9!!! hier ggf. anpassen!
C1 = 4 ‚Steuerungs-Spalten NUR VOR Spalte 4!!!hier ggf. anpassen!
R0 = 7 ’ Markierung in Zeile 7 --> Spalte nicht ausblenden, ggf. anpassen
C0 = 2‘ Markierung in Spalte 2 --> Zeile nicht ausblenden, ggf. anpassen
LC = ActiveCell.SpecialCells(xlLastCell).Column ’ letzte benutzte Spalte auf dem Blatt
For i = C1 To LC ’ durchläuft alle Spalten bis zur letzten benutzten Sp.
If Cells(R0, i) = „“ Then ’ wenn in der aktuellen Spalte die Markierungszelle leer ist…
Columns(i).EntireColumn.Hidden = True '… wird die Spalte ausgeblendet
End If
Next i
’ Die folgenden 6 Zeilen kannst Du weglassen, wenn Du nur Spalten ausblenden willst
’ LR = ActiveCell.SpecialCells(xlLastCell).Row
’ For i = R1 To LR ’ durchläuft alle Zeilen bis zur letzten benutzten Zeile
’ If Cells(i, C0) = „“ Then ’ wenn in der aktuellen Zeile die Markierungszelle leer ist…
’ Rows(i).EntireRow.Hidden = True '… wird die Zeile ausgeblendet
’ End If
’ Next i
End Sub
Sub alle_ein()
Cells.EntireColumn.Hidden = False: Cells.EntireRow.Hidden = False ’ Alle ausgeblendeten Spalten und Zeilen werden eingeblendet, alle Filter zurückgesetzt
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'deaktiviert evtl. vorhandene Filter
End Sub
Beide Makros per Drag&drop in ein Standardmodul kopieren. Start durch Schaltfläche, Steuerelement oder Tastenkombi festlegen und testen 
Am besten erst´mal den Code so lassen und nur das Blatt anpassen. Kannst Du später noch ändern.
Viel Erfolg
Thomas