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

VBA: Code optimieren

VBA: Code optimieren
WalterK
Guten Morgen,
mit dem nachfolgenden Codeteil werden bei bestimmten Überschriften in Zeile 2 die darunter liegenden Zellen formatiert. Allerdings werden die Überschriften mal in Großbuchstaben und mal in Kleinbuchstaben oder auch gemischt geliefert.
Was muss geändert werden, damit die Groß- und Kleinschreibung nicht von Bedeutung ist?
For I = 1 To IIf(Len(Cells(2, Columns.Count)) = 0, Cells(2, Columns.Count).End(xlToLeft).Column, _
Cells(2, Columns.Count))
Select Case Cells(2, I)
Case "Buchungstag", "BUCHUNGSTAG", "FAELLIG", "Faellig"
With Range(Cells(3, I), Cells(LZ, I))
.NumberFormat = "m/d/yyyy"
.HorizontalAlignment = xlCenter
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
Case "VORNAME", "Vorname", "ZUNAME", "Zuname"
With Range(Cells(3, I), Cells(LZ, I))
.NumberFormat = "general"
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
Besten Dank für die Hilfe und Servus, Walter

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA: Code optimieren
31.10.2010 09:00:00
Hajo_Zi
Hallo Walter,
Option Explicit
Sub Walter()
Dim I As Long
Dim Lz As Long
For I = 1 To IIf(Len(Cells(2, Columns.Count)) = 0, Cells(2, Columns.Count).End(xlToLeft). _
Column, _
Cells(2, Columns.Count))
Select Case UCase(Cells(2, I))
Case "Buchungstag", "BUCHUNGSTAG", "FAELLIG", "Faellig"
With Range(Cells(3, I), Cells(Lz, I))
.NumberFormat = "m/d/yyyy"
.HorizontalAlignment = xlCenter
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
Case "VORNAME", "Vorname", "ZUNAME", "Zuname"
With Range(Cells(3, I), Cells(Lz, I))
.NumberFormat = "general"
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
End Select
Next I
End Sub
Gruß Hajo
Anzeige
AW: VBA: Code optimieren
31.10.2010 09:15:27
Hajo_Zi
Hallo Walter,
einige Sachen können noch entfallen.
Option Explicit
Sub Walter()
Dim I As Long
Dim Lz As Long
For I = 1 To IIf(Len(Cells(2, Columns.Count)) = 0, Cells(2, Columns.Count).End(xlToLeft). _
Column, _
Cells(2, Columns.Count))
Select Case UCase(Cells(2, I))
Case "BUCHUNGSTAG", "FAELLIG"
With Range(Cells(3, I), Cells(Lz, I))
.NumberFormat = "m/d/yyyy"
.HorizontalAlignment = xlCenter
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), _
TextQualifier:=xlDoubleQuote, Tab:=True, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
Case "VORNAME", "ZUNAME"
With Range(Cells(3, I), Cells(Lz, I))
.NumberFormat = "general"
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), _
TextQualifier:=xlDoubleQuote, Tab:=True, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
End Select
Next I
End Sub

Anzeige
AW: VBA: Code optimieren
31.10.2010 09:36:19
Nepumuk
Hallo Hajo,
UCase kannst du auch weg lassen.
Option Explicit
Option Compare Text

Public Sub test()
    MsgBox "HAJO" = "hajo"
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA: Code optimieren
31.10.2010 09:39:42
Hajo_Zi
Hallo Nepumuk,
die meisten sind Schreibfaul und "Option Compare Text" sind mehr Buchstaben als "Ucase". Ich kenne das Projekt von Walter nicht, mir ist nich bekannt ob er noch mehr solche Vergleiche macht.
Gruß Hajo
AW: VBA: Code optimieren
31.10.2010 09:45:46
Nepumuk
Hallo Hajo,
dann solltest du wenigsten UCase$ verwenden. Das ist fast doppelt so schnell wie UCase (ohne $).
Gruß
Nepumuk
es funktioniert noch nicht ...
31.10.2010 13:12:14
WalterK
Hallo,
ich habe es jetzt so umgesetzt:
For I = 1 To IIf(Len(Cells(2, Columns.Count)) = 0, Cells(2, Columns.Count).End(xlToLeft).Column, _
Cells(2, Columns.Count))
Select Case UCase$(Cells(2, I))
Case "Buchungstag", "FAELLIG, "Faellig"
With Range(Cells(3, I), Cells(LZ, I))
.NumberFormat = "m/d/yyyy"
.HorizontalAlignment = xlCenter
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), _
TextQualifier:=xlDoubleQuote, Tab:=True, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
Case "VORNAME", "Vorname", "ZUNAME", "Zuname"
With Range(Cells(3, I), Cells(LZ, I))
.NumberFormat = "general"
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
.TextToColumns Destination:=Cells(3, I), _
TextQualifier:=xlDoubleQuote, Tab:=True, _
Other:=False, FieldInfo:=Array(1, 1)
End If
End With
usw. usw.
Allerdings: Die Überschrift Buchungstag ist in der Tabelle nur mit Großbuchstaben geschrieben und wird nicht erkannt und es wird somit auch die Formatierung nicht auf "m/d/yyyy" geändert. Bei der Spalte "Fällig" habe ich beide Möglichkeiten belassen, hier wird die Formatierung auf "m/d/yyyy" geändert.
Bitte nochmals um Hilfe, Servus Walter
PS. Ich habe den Code bei mir genau so geschrieben wie es Hajo gemacht hat, nach dem ich ihn hier hinein kopiert habe, wird trotzdem alles linksbündig angezeigt. Wieso das?
Anzeige
AW: es funktioniert noch nicht ...
31.10.2010 13:15:22
Hajo_Zi
Hallo Walter,
ich habe den Schalter Zitat benutzt. Zu Ucase$ kann ich dir nichts schreiben das kennt mein Excel 2003 und 2010 nicht.
Gruß Hajo
AW: es funktioniert noch nicht ...
31.10.2010 14:00:42
WalterK
Hallo Hajo,
danke für den Tip mit Zitat.
UCase mit oder ohne $, beides funktioniert bei mir nicht.
Danke uns Servus, Walter
AW: es funktioniert noch nicht ...
01.11.2010 10:11:52
Nepumuk
Hallo Walter,
eventuell ein Leerzeichen am Text? Versuch es mal so:
Select Case UCase$(Trim$(Cells(2, I).Text))
        
    Case "BUCHUNGSTAG", "FAELLIG"
        
        With Range(Cells(3, I), Cells(LZ, I))
            .NumberFormat = "m/d/yyyy"
            .HorizontalAlignment = xlCenter
            If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
                .TextToColumns Destination:=Cells(3, I), _
                    TextQualifier:=xlDoubleQuote, Tab:=True, _
                    Other:=False, FieldInfo:=Array(1, 1)
            End If
        End With
        
    Case "VORNAME", "ZUNAME"
        
        With Range(Cells(3, I), Cells(LZ, I))
            .NumberFormat = "general"
            If .Application.WorksheetFunction.CountA(.Cells) > 0 Then
                .TextToColumns Destination:=Cells(3, I), _
                    TextQualifier:=xlDoubleQuote, Tab:=True, _
                    Other:=False, FieldInfo:=Array(1, 1)
            End If
        End With
End Select

@ Hajo,
Zu Ucase$ kann ich dir nichts schreiben das kennt mein Excel 2003 und 2010 nicht.
so ein Quatsch das gibt es schon seit Excel97. Hier mal ein Bild vom Objektkatalog aus Excel 2000 und 2007:
Userbild
Gruß
Nepumuk
Anzeige
AW: es funktioniert noch nicht ...
01.11.2010 10:38:44
Hajo_Zi
Hallo Nepumuk,
teile das meinen Excelversionen mit. Ich habe nur das geschrieben was ich getestet habe.
Gruß Hajo
AW: es funktioniert noch nicht ...
01.11.2010 11:20:29
Nepumuk
Hallo Hajo,
Es gibt nur wenige die Deinen  Computer sehen.
Gruß
Nepumuk
AW: VBA: Code optimieren
01.11.2010 11:07:42
Gerd
Hallo,
das TextToColumn-Geraffel könnte man auslagern, so halt nur mit Excel, das die $-Funktionen kennt. :-)
Sub A()
Select Case UCase$(Trim$(Cells(2, I).Text))
Case "BUCHUNGSTAG", "FAELLIG"
With Range(Cells(3, I), Cells(LZ, I))
.NumberFormat = "m/d/yyyy"
.HorizontalAlignment = xlCenter
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then Umwandeln .Cells
End With
Case "VORNAME", "ZUNAME"
With Range(Cells(3, I), Cells(LZ, I))
.NumberFormat = "general"
If .Application.WorksheetFunction.CountA(.Cells) > 0 Then Umwandeln .Cells
End With
End Select
End Sub

Sub Umwandeln(Rng As Range)
Rng.TextToColumns Destination:=Rng.Cells(1, 1), _
TextQualifier:=xlDoubleQuote, Tab:=True, _
Other:=False, FieldInfo:=Array(1, 1)
End Sub
Gruß Gerd
Anzeige
Danke für Euere Hilfe ...
01.11.2010 12:55:15
WalterK
Hallo zusammen,
...jetzt habe ich mal einiges zum testen.
Servus, Walter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige