Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Gesamte Breite mehrerer Spalten (C:Q) ermitteln...

Gesamte Breite mehrerer Spalten (C:Q) ermitteln...
26.03.2016 15:52:40
cH_rI_sI

... und diese Gesamtbreite möchte ich dann an der Spalte C anwenden, anstatt einen fixen Wert im Coding zu hinterlegen (siehe Wert "55" - siehe fett markierter Coding-Teil):


Private Sub ZeileFormatieren(Zeile As Long, WS As Worksheet)
WS.Range(WS.Cells(Zeile, 1), WS.Cells(Zeile, 2)).Merge
With WS.Range(WS.Cells(Zeile, 1), WS.Cells(Zeile, 17))
.Interior.Pattern = xlNone
.Font.Bold = False
.Font.Size = 10
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
.WrapText = True
.Columns("C:C").ColumnWidth = 55
.Rows.EntireRow.AutoFit
.Columns("C:C").ColumnWidth = 5
WS.Range(WS.Cells(Zeile, 3), WS.Cells(Zeile, 17)).Merge
End With
End Sub

Nachdem ich Probleme hatte, die Zeilenhöhe für einen Zellenverbund automatisch einzustellen, habe ich dies nun so gelöst (Zeilenhöhe passt jetzt einwandfrei zum Text bei den verbundenen Zellen) - aber falls jemand die Spaltenbreite verändert, würde der Text nicht mehr optimal zur Breite des Zellenverbunds passen, deshalb das Ziel einen variablen statt fixen Wert zu verwenden...
Bitte um Eure Unterstützung - Danke!
Lg,
cH_rI_sI

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ..dachte, das ist hier erledigt? warum neu?
26.03.2016 23:06:23
cH_rI_sI
Es geht um eine Optimierung - lesen... ;-)

AW: ..dachte, das ist hier erledigt? warum neu?
27.03.2016 09:30:21
cH_rI_sI
Niemand eine Idee, wie ich das optimieren kann?

AW: ..dachte, das ist hier erledigt? warum neu?
27.03.2016 10:42:35
robert
Hi,
was willst Du genau?
einmal ist
.Columns("C:C").ColumnWidth = 55
.Rows.EntireRow.AutoFit
dann
.Columns("C:C").ColumnWidth = 5

AW: ..dachte, das ist hier erledigt? warum neu?
27.03.2016 11:02:27
Daniel
Hi
Es gibt in Excel zwei verschiedene Spaltenbreiten.
.Width ist die grafische Breite wie bei einem Grafikobjekt,
.Columwidth ist eine Breitenangabe die aussagt, wie oft die Ziffer "0" in Standardschrift nebeneinander angezeigt werden kann.
.Width ist nur lesbar, Einstellen musst du die Breite über .ColumnWidth.
.ColumWidth ist ein Wert, der nur für eine Einzelspalte Sinn ergibt, da es die innere Breite ohne Rand ist.
Ausser dem kannst du die Breite auch nicht stufenlos, sondern immer nur in 1/7-Schritten verändern.
Wenn du einer Spalte die gleiche Breite geben willst wie einer Gruppe von Spalten, dann musst du in einer Schleife den .Columwitdh-Wert solange anpassen, bis die .Width-Werte gleich sind. (Bitte beachten, das eine exakte Gleichheit nicht erreicht werden kann.
Als Startwert kannst du ha die Summe der ColumnWidth-Werte der Einzelspalten verwenden.
Ggf reicht es ja aus, zu dieser Summe einen empirisch ermittelten Zuschlag für die Randbereiche zu machen um so auf die Schleife zu verzichten. Dieser sollte sich bei gleicherSpaltenanzahl konstant bleiben.
Gruß Daniel

Anzeige
AW: ..dachte, das ist hier erledigt? warum neu?
27.03.2016 11:24:14
cH_rI_sI
Nochmals zur Erklärung:
Ich möchte bei der Spalte C nicht nur die ungefähre Gesamtbreite der Spalten C:Q einstellen (derzeit Wert 55), sondern ich möchte den Wert der Gesamtbreite C:Q ermittlen und dann diesen Wert für Spalte C einstellen...
Wie muss ich das Coding anpassen? Bitte um Eure Unterstützung - Danke!
Lg

Zellposition und -Breite
27.03.2016 18:47:55
Michael
Hi zusammen,
man kann mit range.left die linke Position der Zelle ermitteln:
Option Explicit
Sub spalteC()
Dim i&, w#
MsgBox "colWidth: " & Columns("C").ColumnWidth & _
" width: " & Columns("C").Width
For i = 3 To 17 ' C bis Q
w = w + Columns(i).ColumnWidth
Next
MsgBox "C1-left: " & Range("C1").Left & " D1-left: " _
& Range("D1").Left & " R1-left: " & Range("R1").Left _
& vbLf & "R1-left minus C1-left: " & _
Range("W1").Left - Range("C1").Left & " w: " & w _
& vbLf & "(D1-left minus C1-left)/C.colwidth: " & _
(Range("D1").Left - Range("C1").Left) / Columns("C").ColumnWidth _
& vbLf & "(R1-left minus C1-left)/w: " & _
(Range("R1").Left - Range("C1").Left) / w
End Sub
Der Quotient der beiden unteren Berechnungen liegt (übereinstimmend) bei ca. 5,6.
Das könnte weiterhelfen...
Schöne Grüße,
Michael

Anzeige
AW: Zellposition und -Breite
27.03.2016 21:03:31
cH_rI_sI
Hallo Michael,
besten Dank für deinen Vorschlag - wie baue ich das nun in das bestehende Coding ein?
Vielleicht hast noch Lust dies in meinem Coding umzusetzen (statt Wert 55 [siehe fett markierte Zeile] die ermittelte Gesamtbreite via deinem Coding):
   Private Sub ZeileFormatieren(Zeile As Long, WS As Worksheet)
WS.Range(WS.Cells(Zeile, 1), WS.Cells(Zeile, 2)).Merge
With WS.Range(WS.Cells(Zeile, 1), WS.Cells(Zeile, 17))
.Interior.Pattern = xlNone
.Font.Bold = False
.Font.Size = 10
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
.WrapText = True
.Columns("C:C").ColumnWidth = 55
.Rows.EntireRow.AutoFit
.Columns("C:C").ColumnWidth = 5
WS.Range(WS.Cells(Zeile, 3), WS.Cells(Zeile, 17)).Merge
End With
End Sub


Danke und schönen Abend noch!
Glg

Anzeige
AW: Zellposition und -Breite
28.03.2016 15:44:30
Michael
Hi cH_rI_sI,
wenn Du eine Datei hochlädst, sehe ich es mir vielleicht mal an, aber ohne ist mir das zu abstrakt.
Du kennst ja die allg. Meinung zu verbundenen Zellen - ich teile die auch.
Schöne Grüße,
Michael

AW: Zellposition und -Breite
28.03.2016 01:02:30
Christoph Zahn
Hallo Chrisi,
habe nicht so ganz das Problem verstanden.
Wie von jemanden schon geschrieben stellst du ja erst 55 (der fixe Wert) als Breite ein und dann 5.
Hier eventuell mal ein Lösungsansatz.
Sub Spaltenbreite()
Dim Breite As Long
Dim BreiteG As Long
Dim SP As Long
For SP = 3 To 17
Breite = Columns(SP).ColumnWidth
BreiteG = BreiteG + Breite
Next SP
Columns("C:C").ColumnWidth = BreiteG
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige