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

Jeden Wert eines Arrays bearbeiten

Jeden Wert eines Arrays bearbeiten
03.04.2017 04:22:28
Barbaraa
Hallo
In einem Array, das nur Texte enthält, soll alles in Großbuchstaben umgewandelt werden, was ich mit einer einfachen Schleife versucht habe.
Leider wird das Ergebnis nicht ins Array zurückgeschrieben.
Sub Grossbuchstaben()
Dim Form() As Variant
Dim a
Form = Range("m2", "q49")
For Each a In Form
a = UCase(a)
Next
End Sub
Komme ich um eine doppelte Schleife (für Spalten und Zeilen) nicht umhin, oder gibt es einen Weg wie oben?
LG, barbara

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Jeden Wert eines Arrays bearbeiten
03.04.2017 06:11:08
Hajo_Zi
Hallo Barbara,
Option Explicit
Sub Grossbuchstaben()
Dim Form() As Variant
Dim a
Form = Range("m2", "q49")
Dim LoI As Long
Dim LoJ As Long
For LoI = 2 To 49
For LoJ = 1 To 5
Form(LoI - 1, LoJ) = UCase(Form(LoI - 1, LoJ))
Next LoJ
Next LoI
End Sub

AW: Jeden Wert eines Arrays bearbeiten
03.04.2017 15:33:00
Barbaraa
Vielen Dank, Hajo und Daniel.
Damit komme ich gut weiter. Ein gutes Stück zumindest.
LG, Barbara
AW: Jeden Wert eines Arrays bearbeiten
03.04.2017 08:26:54
Daniel
Hi
bei einer For-Each-Schleife über Arrays ist der Schleifenzähler (Variable a) eine unabhängige Kopie des Array-Wertes. Dh wenn du den Schleifenzähler veränderst, hat das keinen Einfluss auf den Array-Wert
Du brauchst also eine Schleife über Zeilen und Spalten des Arrays und musst die Array-Werte direkt über den Index ansprechen.
Wenn die geänderten Werte dann auch noch im Zellbereich erscheinen sollen, musst du dass Array auch nich zurückschreiben:

dim rng as range
dim arr as Variant
dim z as Long
dim s as lon
set rng = Range("m2", "q49")
arr = rng.value
for z = Lbound(arr, 1) to Ubound(arr, 1)
for s = Lbound(arr, 2) to Ubound(arr, 2)
arr(z, s) UCase(arr(z, s))
next s
next z
rng.value = arr

wenn du die Zellwerte direkt ändern willst, dann kannst du aber auch mit einer For-Each-Schleife über die Zellen arbeiten. Das geht dann direkt, weil der Schleifenzähler hier eine Kopie der Zellreferenz (bezug auf die Zelle) ist und nicht eine Kopie des Zellwertes und die Zellreferenz bleibt unverändert:
dim c as Range
for each c in Range("m2", "q49")
c.Value = UCase(c.Value)
Next
die erste Variante ist zwar aufwendiger zu programmieren, sollte in der Regel aber schneller sein als die direkte Zellbearbeitung.
gruß Daniel
Anzeige
3 Threads für ein Problem, ist übertrieben...
03.04.2017 08:41:08
EtoPHG
Barbara,
so wie es aussieht suchst du nur eine Lösung für das Ersetzen von Umlauten durch Doppelvokale, bzw. umgegkehrt. Das lässt sich mit einer einfachen Formel (wie hier) lösen!
Wenn du ein Problem hast, suche zuerst im Internet oder in der Recherche, bevor du hier einen Thread nach dem Anderen öffnest!
Gruess Hansueli

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige