Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
980to984
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
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

alle Zellen in Großbuchstaben umwandeln - zu lange

alle Zellen in Großbuchstaben umwandeln - zu lange
23.05.2008 15:38:23
mtremer
Hallo Excel-Freunde,
kann mir jemand sagen, warum folgender Code zum Umwandeln aller Buchstaben in Großbuchstaben so lange dauert?
Range("B2:D3000").Select
For Each z In Selection
z.Value = UCase(z.Value)
Next
Excel benötigt pro Zeile eine Sekunde. Bei 3 Spalten à 3000 Zeilen (=9000 Zeilen) sind das 50 Minuten!
Kennt jemand von Euch einen Code der schneller geht?
Danke.
Viele Grüße
Marco

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 15:51:00
Renee
Hi Marco,
Schau mal im Archiv unter GetMoreSpeed:

Sub marine()
Dim rC As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each rC In Range("B2:D3000")
rC.Value = UCase(rC.Value)
Next
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


GreetZ Renée

AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 16:02:06
mtremer
Hallo Renée,
das ging ja fix. Deine Antwort war fast so schnell, wie das Ergebnis des Codes!
Danke.
Viele Grüße
Marco

Anzeige
AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 15:51:27
Matthias
Hallo Marco,
vielleicht sind viele Formeln dabei, dann sollte man die autom. Berechnugn abschalten:

Sub tt()
Dim z As Range
Dim calcmode As XlCalculation
calcmode = Application.Calculation 'Modus merken
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each z In Range("B2:D3000")
z.Value = UCase(z.Value)
Next
Application.Calculation = calcmode
Application.ScreenUpdating = True
End Sub


Wenn du nur Konstanten ändern willst, kannst zu auch schreiben:


For Each z In Range("B2:D3000").SpecialCells(xlCellTypeConstants)


Gruß Matthias

Anzeige
AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 16:03:41
mtremer
Hallo Matthias,
danke für Deine schnelle Antwort.
Nun habe ich zwei Lösungen für das selbe Problem. Welche soll ich nur nehmen?
Da habe ich die Qual der Wahl ;-)
Danke.
Viele Grüße
Marco

AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 16:57:00
mtremer
Das klingt schon viel besser. Danke für den Hinweis.
So habe ich das dann umgesetzt, ging aber nicht. Was habe ich falsch gemacht?

Private Sub CommandButton1_Click()
Dim z As Range
Dim calcmode As XlCalculation
calcmode = Application.Calculation 'Modus merken
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each z In Range("B2:D3000").SpecialCells(xlCellTypeConstants)
z.Value = UCase(z.Value)
Next
Application.Calculation = calcmode
Application.ScreenUpdating = True
End Sub


Viele Grüße
Marco

Anzeige
AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 17:13:00
Matthias
Hallo Marko,
So habe ich das dann umgesetzt, ging aber nicht. Was habe ich falsch gemacht?
Ich liebe diese detaillierten Fehlerbeschreibungen... SEUFZ
Gruß Matthias

AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 17:18:00
mtremer
sorry. Ich glaube, ich weiß, wo ich zuerst Verbesserungen umsetzen muß: meine Ausdrucksweise.
Nachdem ich den Code so umgesetzthabe, ist nichts passiert ;-)
Keine Formel war weg (das fand ich gut), aber es kamen auch keine Großbuchstaben...
Was nun?
Viele Grüße (falls Du nach 17:30 nix mehr hörst, bin ich schon weg. Nicht böse sein, ich bin Montag wieder da...)
Marco

Anzeige
AW: alle Zellen in Großbuchstaben umwandeln - zu lange
23.05.2008 15:51:59
Andi
Hi,
50 Minuten? Bei mir dauert das ganze ca ne halbe Sekunde...
Probier trotzdem mal dies:
Application.ScreenUpdating = False
For Each z In Range("B2:D3000")
z.Value = UCase(z.Value)
Next
Application.ScreenUpdating = True
Schönen Gruß,
Andi

AW: alle Zellen in Großbuchstaben umwandeln - zu lange
23.05.2008 15:59:00
mtremer
Hallo Andi,
ich habe die Operation abgebrochen und Excel per Task Manager gekillt. Vorher konnte ich Excel noch dabei beobachten, wie er jede Zelle einzeln anfässt. Mein Auge sagte 1 Sekunde pro Zeile. Den Rest hat mir mein Taschenrechner gesagt ;-)
Deine Lösung brachte mich aber auch nicht weiter. Renee und Matthias hatten Vorschläge die sofort funktioniert haben.
Trotzdem danke für Deine Antwort.
Viele Grüße
Marco

Anzeige
AW: alle Zellen in Großbuchstaben umwandeln - zu l
23.05.2008 16:19:16
Matthias
Hallo Marco,
damit du auch verstehst was du da machst:
Du schaltest die autom. Berechnung ab, dadurch werden die Formeln nicht nach jeder Zelländerung neu berechnet. Erst am Ende (nach der Schleife) wird die autom. Berechnung wieder aktiviert.
Und wenn du mit .SpecialCells() arbeitest (siehe meine Antwort oben), geht's noch schneller, weil dann die Zellen, die Formeln beinhalten, nicht in Großbuchstaben gewandelt werden (falls das nicht nötig ist).
Gruß Matthias

AW: ne dritte Variante
23.05.2008 17:21:20
Daniel
Hi
da ich Freund der Schleifenfreien Programmierung bin und auch so hilfkniffs wie Bildschirmabschalten bei geschicker Programmierung für weitestgehend überflüssig halte,
möchte ich hier nochmal ne 3. Variante vorstellen und dem Geschwindigkeitsvergeleich stellen:
die Lösung orientiert sich daran, wie man das Problem ohne VBA lösen würde:

Sub InGrossbuchstaben()
Dim add As String, add1 As String
Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = ActiveSheet
Set sh2 = Sheets.add(after:=Sheets(ActiveWorkbook.Sheets.Count))
add = "B2:D3000"
add1 = "'" & sh1.Name & "'!" & Left(add, InStr(add, ":") - 1)
sh2.Range(add).FormulaLocal = "=Gross(" & add1 & ")"
sh1.Range(add).Value = sh2.Range(add).Value
Application.DisplayAlerts = False
sh2.Delete
Application.DisplayAlerts = True
sh1.Select
End Sub


Gruß, Daniel

Anzeige
AW: ne dritte Variante
24.05.2008 01:45:23
Matthias
Hallo Daniel,
eine interessante Variante.
Leider gehen hierbei aber die Formeln flöten. Das müsste man noch berücksichtigen.
Am schwierigsten ist wohl, wenn Formeln wie

=wenn(a=1;"Hallo";"nicht Hallo")

enthalten sind...
diese Werte auch in Großbuchstaben zu wandeln ohne Schleife.
Gruß Matthias

AW: ne dritte Variante
24.05.2008 11:31:00
Daniel
Hi
nein, mit Formeln kann meine Lösung nicht umgehen, dafür ist sie aber nochmal um etwa den Faktor 10 schneller (auf meinem Rechner)
aber wenn eine Datentabelle dieser Grössenordnung mit Formeln durchsetzt ist, müsste man sich den grundlegenden Aufbau überlegen, weil sowas nur Ärger macht.
hier sollten die Spalten in sich sortenrein sein, dh. eine Spalte enthält entweder nur Texte, nur Zahlen oder nur Formeln (und wenn, dann jede Zelle in der Spalte die gleiche formel).
alles andere verkompliziert nur die Bearbeitung und Auswertung der Daten.
Gruß, Daniel

Anzeige
Dem kann ich nur zustimmen,... Gruß owT
24.05.2008 14:31:43
Luc:-?
:-?

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige