Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1324to1328
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

Markierte Spalten in Summe auf bestimmte Breite

Markierte Spalten in Summe auf bestimmte Breite
21.08.2013 09:11:14
Franz
Hallo!
Suche verzweifelt nach einer Möglichkeit (Makro) um mehrere markierte Spalten IN SUMME auf eine bestimmte cm-Breite zu bringen.
Also: Ich markiere zb. Spalten C, D, E und gebe zb. in Zelle A1 den Wert 7 ein. Dann möchte ich ein Makro, dass mir die drei Spalten automatisch in Summe auf 7cm bringt. Dh. C,D,E haben jeweils 2,33cm Breite.
Ich kann leider nur VBA mit dem Macrorecorder und da komm ich da nicht hin...
Bitte um Hilfe!
Danke!
lg
Franz

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Gesamt-Spaltenbreite
21.08.2013 09:45:15
Erich
Hi Franz,
das sollte auch funzen, wenn die Spalten nicht nebeneinander liegen (Mehrfachselektion):

Option Explicit
Sub SpaltenBreiteGesamt()
Dim rngA As Range, lngC As Long
For Each rngA In Selection.Areas
lngC = lngC + rngA.Columns.Count
Next rngA
Selection.EntireColumn.ColumnWidth = Cells(1, 1) / lngC
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: Markierte Spalten in Summe auf bestimmte Breite
21.08.2013 09:47:11
hary
Moin Franz
Kann aber nicht immer zu 100% stimmen.
In A1
Selection.ColumnWidth = (-0.71 + 5.1425) * (Cells(1, 1) / Selection.Columns.Count)

gruss hary

Anzeige
Gesamt-Spaltenbreite kurz
21.08.2013 09:48:23
Erich
Hi Franz,
wenn die Spalten nebeneinander liegen, geht es einfacher:

Sub SpaltenBreiteKurz()
Selection.EntireColumn.ColumnWidth = Cells(1, 1) / Selection.Columns.Count
' oder
With Selection
.EntireColumn.ColumnWidth = Cells(1, 1) / .Columns.Count
End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Gesamt-Spaltenbreite - in cm
21.08.2013 10:19:56
Erich
Hi Franz,
die cm habe ich total überlesen und nicht berücksichtigt. Habs bei Hary dann gesehen... :-)
Hier noch einmal die Codes:

Option Explicit
Sub SpaltenBreiteGesamt()
Dim rngA As Range, lngC As Long
For Each rngA In Selection.Areas
lngC = lngC + rngA.Columns.Count
Next rngA
Selection.EntireColumn.ColumnWidth = -0.71 + 5.1425 * Cells(1, 1) / lngC
End Sub
Sub SpaltenBreiteKurz()
Selection.EntireColumn.ColumnWidth = _
-0.71 + 5.1425 * Cells(1, 1) / Selection.Columns.Count
' oder
With Selection
.EntireColumn.ColumnWidth = -0.71 + 5.1425 * Cells(1, 1) / .Columns.Count
End With
End Sub
@Hary: Bei
Selection.ColumnWidth = (-0.71 + 5.1425) * (Cells(1, 1) / Selection.Columns.Count)
sind vorn die Klammern falsch, es muss heißen
Selection.ColumnWidth = -0.71 + 5.1425 * (Cells(1, 1) / Selection.Columns.Count)
Die "-0,71" ist nicht mit zu multiplizieren.
Kürzer noch:
Selection.ColumnWidth = -0.71 + 5.1425 * Cells(1, 1) / Selection.Columns.Count
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Danke Erich owT gruss
21.08.2013 10:36:51
hary
.

Danke
21.08.2013 17:40:36
Franz
Hallo!
Erstmals vielen Dank für Eure rasche Hilfe! Das ist wirklich toll!
Das Makro macht genau das was ich brauche!! Einzig mit den unterschiedlichen Breiten bzw. Umrechnungsfaktoren komm ich noch nicht zurecht (siehe Screenshot).
Userbild
Wenn ich eine Box mache und diese auf Breite 15cm setze und dann 2 Spalten markiere und obiges Makro anwende bleibt immer noch ein gehöriger Breitenunterschied zwischen Box und Spalten. In Zelle A1 steh 15 also hab ich vermutet er macht die Breite auch 15 cm oder die 15 cm bei der Box stimmen nicht...ich steh auf der Leitung!!!
Danke für Eure Hilfe!
lg
Franz

Anzeige
AW: Korrektur
21.08.2013 22:45:32
Franz
Hallo,
folgenden Code hab ich im Netz gefunden, der genau die cm Angaben umsetzt und somit auch ident mit den cm Angaben von der Box ist...(ist ein Codeschnipsel von einem Microsoft Professionel, der meinte mit der 2maligen Iteration kommt man am nähesten hin...)
With Range("A:B")
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
End With
Allerdings folgendes Problem: wie kann ich jetzt dieses Range("A:B") dynamisch machen sodaß es auf markierte Spalten reagiert...Selection.column dort einsetzen bringt nicht den gewünschten Erfolg...
Danke!
lg
Franz

Anzeige
AW: Korrektur
21.08.2013 23:13:04
Franz
Hallo!
Hurra, ich hab's!!
Sub Test()
With Range(Selection.Columns.Address)
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
.ColumnWidth = (28.346456692913 * Cells(1, 18) / .Width) * .ColumnWidth
End With
End Sub
Hiermit komm ich dynamisch auf die markierten Spalten und über die vielen Iterationen komm ich auch ziemlich genau auf die cm Spaltenbreite die in Zelle R1 eingeben wird. Je mehr Spalten man markiert, desto mehr Iterationen sollte man einbauen damit es halbwegs genau wird...
Danke für die Hilfe und die Denkansätze!!!
lg
Franz

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige