Clever-Excel-Forum

Normale Version: Sichtbare Spaltenanzahl ermitteln
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Leute,

ich möchte /muss über einen bestimmten Bereich die
Anzahl der sichtbaren Spalten ermitteln.

Also so:
Dim i%, a%
For i = 1 To 10
If Not Columns(i).Hidden Then a = a + 1
Next
Debug.Print "Sichtbare Spaltenanzahl: " & a

Obwohl die Aufgabe ja super trivial ist,
würde ich doch gerne wissen, ob es nicht vielleicht
eine eingebaute Methode bzw. Funktion bei VBA
gibt, die das erledigt.
Sieht doch gut aus. Wüsste jetzt nicht, wie Du ohne Schleife Dein a erhalten wolltest. 

Außer evtl. über Spaltenbreiten in einem Rutsch (wenn die alle gleich sind): summenproduktendes ZELLE("Breite"). EDIT: Bislang nicht hinbekommen. Dann xl4MakroFkt.
Moin!
Yepp, geht auch ohne Schleife.
Ob das dann für Dich besser verständlich ist, Büroklammer, musst Du entscheiden:
Sub Visible_Columns()
With Range("A:J")
  MsgBox "Sichtbare Spalten: " & .Columns.Count - .SpecialCells(xlCellTypeVisible).Columns.Count
End With
End Sub

Gruß Ralf
Hallo Ralf,

auf das SpecialCells bin ich gestern abend auch schon gekommen,

funktioniert aber meiner Meinung nach nicht richtig.
Ich habe gerade mal getestet:
"Eigentlich" müsste ja folgendes reichen:
Code:
MsgBox "Sichtbare Spalten: " & Range("A:J").SpecialCells(xlCellTypeVisible).Columns.Count
Funktioniert aber aus unerfindlichen Gründen nicht korrekt!  Huh

Folgendes aber sehr wohl:
Code:
Debug.Print Range("A1:J1").SpecialCells(xlCellTypeVisible).Count

Gruß Ralf
Da fehlen noch die anderen beiden Ergebnisse der 2x2-Matrix, RPP63 ;)

MsgBox "Sichtbare Spalten: " & Range("A:J").SpecialCells(xlCellTypeVisible).Columns.Count
MsgBox "Sichtbare Spalten: " & Range("A:J").SpecialCells(xlCellTypeVisible).Count
Debug.Print Range("A1:J1").SpecialCells(xlCellTypeVisible).Columns.Count
Debug.Print Range("A1:J1").SpecialCells(xlCellTypeVisible).Count
Wenn etwas nicht so funktioniert, wie ich es erwarte, packt mich der Ehrgeiz:
Die erste Variante mit .Columns.Count funktioniert nicht, weil die SpecialCells-Methode eine Mehrfachauswahl ergibt und die Columns-Eigenschaft folgende Einschränkung hat:

Zitat:Wenn diese Eigenschaft auf ein Range -Objekt angewendet wird, das eine Mehrfachmarkierung enthält, gibt sie lediglich die Spalten aus dem ersten Teil des Bereichs zurück.

https://msdn.microsoft.com/de-de/VBA/Exc...erty-excel
Dann klappt die zweite? Blau heißt: OK. Rot: Nicht. Schwarz: Noch nicht getestet.
Von Deinen vier Ansätzen klappt aus obigem Grund nur die vierte, also mein:
Debug.Print Range("A1:J1").SpecialCells(xlCellTypeVisible).Count
Es ginge natürlich auch:
Debug.Print Range("A:J").SpecialCells(xlCellTypeVisible).Count / 2 ^ 20
@Ralf:

folgendes aber sehr wohl:

Code:
Debug.Print Range("A1:J1").SpecialCells(xlCellTypeVisible).Count

Richtig Ralf. Während bei dir aber der Groschen sofort fiel, blieb bei mir
wohl offensichtlich der Knoten im Kopf hängen. Insofern Danke!

Wie gesagt eine Kleinigkeit, aber trotzdem (für mich) wichtig.
Einen schönen Sonntag.