Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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.
Antworten 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.
Antworten 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)
Antworten Top
#4
Hallo Ralf,

auf das SpecialCells bin ich gestern abend auch schon gekommen,

funktioniert aber meiner Meinung nach nicht richtig.
Antworten 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
Antworten 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
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • Büroklammer
Antworten 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)
Antworten Top
#8
Dann klappt die zweite? Blau heißt: OK. Rot: Nicht. Schwarz: Noch nicht getestet.
Antworten 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
Antworten 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.
Antworten Top


Gehe zu:


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