Registriert seit: 25.09.2014
Version(en): 2013
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.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
06.05.2018, 08:24
(Dieser Beitrag wurde zuletzt bearbeitet: 06.05.2018, 08:24 von LCohen.)
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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 25.09.2014
Version(en): 2013
Hallo Ralf,
auf das SpecialCells bin ich gestern abend auch schon gekommen,
funktioniert aber meiner Meinung nach nicht richtig.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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!
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:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Büroklammer
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
06.05.2018, 09:11
(Dieser Beitrag wurde zuletzt bearbeitet: 06.05.2018, 09:12 von LCohen.)
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:1 Nutzer sagt Danke an LCohen für diesen Beitrag 28
• Büroklammer
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
Dann klappt die zweite? Blau heißt: OK. Rot: Nicht. Schwarz: Noch nicht getestet.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Büroklammer
Registriert seit: 25.09.2014
Version(en): 2013
@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.