Sichtbare Spaltenanzahl ermitteln
#1
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.
Top
#2
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.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#3
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#4
Hallo Ralf,

auf das SpecialCells bin ich gestern abend auch schon gekommen,

funktioniert aber meiner Meinung nach nicht richtig.
Top
#5
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Büroklammer
Top
#6
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
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • Büroklammer
Top
#7
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#8
Dann klappt die zweite? Blau heißt: OK. Rot: Nicht. Schwarz: Noch nicht getestet.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#9
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Büroklammer
Top
#10
@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.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste