Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
876to880
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
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Formatierung / Verschieben per VBA ?

Formatierung / Verschieben per VBA ?
09.06.2007 12:56:47
Selma
Hallo Leute,
ich suche nach eine VBA-Lösung, die ich in ein vorhandenes Makro ergänzen möchte, dass dies macht:
- Wenn in Spalte B die Zellen mit "Conf Name" vorkommt,
dann soll für diese Zelle der Bereich A:C in grau und fett (Schrift) dargestellt werden.
- Wenn in Spalte A der erste Zeichen nicht ein "-" oder ein ">" ,
dann sollen die Zelleninhalte von Spalte A nach Spalte C verschoben werden.
- Wenn in Spalte A der Zelleninhalt mit ">>>" anfängt,
dann soll für diese Zelle der Bereich A:C in blau und fett (Schrift) dargestellt werden.
Anbei füge ich die Beispieldatei (die Arbeitsblätter "VORHER" und "NACHHER" beinhaltet) bei: https://www.herber.de/bbs/user/43111.xls
Vielen herzlichen Dank im Voraus...
Liebe Grüße
Selma

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

Betreff
Datum
Anwender
Anzeige
AW: Formatierung / Verschieben per VBA ?
09.06.2007 13:20:00
Josef
Hallo Selma,
probier mal.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Format_Selma()
Dim lngR As Long, lngL As Long

On Error GoTo ErrExit
GMS

lngL = Application.Max(Cells(Rows.Count, 1).End(xlUp).Row, _
    Cells(Rows.Count, 3).End(xlUp).Row, _
    Cells(Rows.Count, 3).End(xlUp).Row)

Range("A1:C" & lngL).ClearFormats

For lngR = 1 To lngL
    
    If Cells(lngR, 2) = "Conf Name" Then
        
        Range(Cells(lngR, 1), Cells(lngR, 3)).Interior.ColorIndex = 15
        Range(Cells(lngR, 1), Cells(lngR, 3)).Font.Bold = True
        
    ElseIf Cells(lngR, 1) <> "" And Left(Cells(lngR, 1), 1) <> "-" And Left(Cells(lngR, 1), 1) <> ">" Then
        
        Cells(lngR, 3) = Cells(lngR, 1)
        Cells(lngR, 1).ClearContents
        
    ElseIf Left(Cells(lngR, 1), 3) = ">>>" Then
        
        Range(Cells(lngR, 1), Cells(lngR, 3)).Interior.ColorIndex = 37
        Range(Cells(lngR, 1), Cells(lngR, 3)).Font.Bold = True
        
    End If
    
Next

Range("A:C").Columns.AutoFit

ErrExit:
GMS True

End Sub


Sub GMS(Optional ByVal Modus As Boolean = False)

With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    .Calculation = IIf(Modus, -4105, -4135)
    .Cursor = IIf(Modus, -4143, 2)
    .CutCopyMode = False
End With

End Sub

Gruß Sepp

Anzeige
AW: Formatierung / Verschieben per VBA ?
09.06.2007 13:42:00
Daniel
Hallo
das färben der Übeschriften geht am einfachsten über Bedingte Formatierung, das andere über normalen Ausschneiden und kopieren.
um zu entscheiden, welche Zeilen vom verschieben betroffen sind, nutze ich eine Formel. Das ist schneller als in VBA jede Zeile einzeln zu prüfen.

Sub Makro1()
Dim Zelle As Range
Application.ScreenUpdating = False
'--- Überschriften färben ---
With Columns("A:C")
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="=ZS2=""Conf Name"""
.FormatConditions(1).Font.Bold = True
.FormatConditions(1).Interior.ColorIndex = 15
.FormatConditions.Add Type:=xlExpression, Formula1:="=LINKS(ZS1;3)="">>>"""
.FormatConditions(2).Font.Bold = True
.FormatConditions(2).Interior.ColorIndex = 37
End With
'--- Zellen verschieben -------
Columns(4).Insert
With Range("D1:D" & Cells(65536, 1).End(xlUp).Row)
.FormulaR1C1 = "=IF(OR(RC1="""",LEFT(RC1,1)=""-"",LEFT(RC1,1)="">""),0,TRUE)"
For Each Zelle In .SpecialCells(xlCellTypeFormulas, 4)
Zelle.Offset(0, -3).Cut Destination:=Zelle.Offset(0, -1)
Next
Application.CutCopyMode = False
End With
Columns(4).Delete
Application.ScreenUpdating = True
End Sub


Gruß, Daniel

Anzeige
AW: Formatierung / Verschieben per VBA ?
09.06.2007 14:04:00
Josef
Hallo Daniel,
"um zu entscheiden, welche Zeilen vom verschieben betroffen sind, nutze ich eine Formel. Das ist schneller als in VBA jede Zeile einzeln zu prüfen"
Bist du dir da sicher? Ich hab' spasshalber mal deinen und meinen Code bei einer Tabelle mit über 10.000 Zeilen getestet. Dein Code 9,7 sek, meiner 1,8 sek.
Gruß Sepp

AW: Formatierung / Verschieben per VBA ?
09.06.2007 14:51:00
Selma
Vielen Dank Sepp!
Vielen Dank Daniel!
Es funktioniert prima....
LG
Selma

AW: Need for Speed
09.06.2007 15:46:00
Daniel
Hi
ja, ganz sicher ;-)
ich hab nur inkonsequenterweise dann doch wieder ne Schleife eingebaut, damit ich per Cut/Paste auch alle eventuell vorrhandenen Formatierungen mit verschiebe.
wenn man darauf verzichtet und sich auf die Zellinhalte beschränkt, braucht man auch die Schleife nicht mehr:

Sub Makro2()
Dim Zelle As Range
Application.ScreenUpdating = False
'--- Zellen verschieben -------
Columns(4).Insert
Range("D1:D" & Cells(65536, 1).End(xlUp).Row).FormulaR1C1 = "=IF(OR(RC1="""",LEFT(RC1,1)=""- _
"",LEFT(RC1,1)="">""),0,TRUE)"
With Columns(4).SpecialCells(xlCellTypeFormulas, 4)
.Offset(0, -1).FormulaR1C1 = "=RC1"
Columns(3).Formula = Columns(3).Value
.Offset(0, -3).ClearContents
End With
Columns(4).Delete
'--- Überschriften färben ---
With Columns("A:C")
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="=ZS2=""Conf Name"""
.FormatConditions(1).Font.Bold = True
.FormatConditions(1).Interior.ColorIndex = 15
.FormatConditions.Add Type:=xlExpression, Formula1:="=LINKS(ZS1;3)="">>>"""
.FormatConditions(2).Font.Bold = True
.FormatConditions(2).Interior.ColorIndex = 37
End With
Application.ScreenUpdating = True
End Sub


mit diesem Makro sieht bei mir im Performance-Vergleich (12000 Zeilen) so aus:


Mein Makro alt: 18,5 sec
dein Makro    :  1,6 sec
mein Makro neu:  0,25 sec


Gruß, Daniel

Anzeige
AW: Need for Speed
09.06.2007 16:07:07
Josef
Hallo Daniel,
darauf wollte ich ja hinaus. Einen Nachteil hat dein Makro aber immer noch. Im besseren Fall hat die Datei
dann fast 200.000 Zellen mit Bedingter Formatierung, im schlecheteren über 3.000.000.
Gruß Sepp

AW: Need for Speed
09.06.2007 16:43:22
Daniel
Hallo
Ist das ein Problem, wenn alle Zellen die gleiche bedingte Formatierung haben?
Ich dachte immer, schwierig wirds erst, wenn für einzelne Zellen unterschiedliche Formate gelten.
solange es einen zusammenhängenden Block mit gleichen Formaten gibt, spielt dann die absolute Grösse dieses Zellblocks nur noch eine untergeornete Rolle.
xllimits sagt dazu folgendes:

Möchte man eine Arbeitsmappe zu speichern, die mehr als 2'050 Zeilen mit Zellen enthält, welche  _
eine bedingte Formatierung verwenden, so erscheint die Fehlermeldung "Excel konnte nicht alle Daten und Formatierungen, die Sie dem Dokument hinzugefügt haben speichern." In der englischen Ausgabe von Microsoft Excel lautet die Fehlermeldung "Excel could not save all the data and formatting you recently added to ." (Anmerkung des Autors: Ich hätte gerne den Fehlermeldungsdialog hier abgebildet. Trotz intensiven Bemühungen ist es mir bis heute jedoch nicht gelungen, die Fehlermeldung zu erzeugen.)
Wenn mehrere Zellen die gleiche bedingte Formatierung besitzen, d.h. eine identische Bedingungsregel und Formatierung, so können praktisch unbegrenzt viele Zellen mit bedingter Formatierung verwendet werden, ohne dass beim Speichern der Arbeitsmappe die oben erwähnte Fehlermeldung auftritt. Es ist beispielsweise möglich, den Zellbereich A1:J500 eines Tabellenblattes (= 5'000 Zellen) mit einer identischen bedingten Formatierung zu belegen. Die in der folgenden Abbildung dargestellte bedingte Formatierung kann somit problemlos allen 5'000 Zellen zugewiesen werden.


Gruß, Daniel

Anzeige
AW: Need for Speed
09.06.2007 17:21:00
Josef
Hallo Daniel,
ich meinte auch nicht ein Problem mit den Formaten, sondern die Dateigröße ansich.
Gruß Sepp

AW: Need for Speed
09.06.2007 18:16:10
Daniel
Hi,
wenn kleiner ein Problem ist, dann ja ;-).
ich hab mal Selmas Beispiel-Datei auf 48000-Zeilen aufgeblasen und unsere Makros drüberlaufen lassen.
mit deiner Variante hat die Datei 2,6 MB mit meiner nur 2,0 MB.
(die leere Datei ohne Formate hat 2,0 MB)
also die Bedingten Formatierungen sind nicht daran schuld, daß die Datei grösser wird.
Gruß, Daniel

Anzeige
na dann ist's ja gut;-) o.T.
09.06.2007 18:22:00
Josef
Gruß Sepp

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige