Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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

Anzeige
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Werte in einem Array mit VBA bearbeiten


Schritt-für-Schritt-Anleitung

Um jeden Wert eines Arrays in Excel VBA zu bearbeiten, kannst du die For Each-Schleife verwenden. Beachte jedoch, dass bei der Verwendung von For Each die Schleifenvariable eine Kopie des Wertes ist und Änderungen somit nicht das Originalarray beeinflussen. Hier ist eine Schritt-für-Schritt-Anleitung, um alle Werte in einem Array in Großbuchstaben zu konvertieren:

  1. Deklariere die Variablen: Du benötigst eine Variable für das Array und eine für die Schleifeniteration.

  2. Lese den Zellbereich in das Array ein:

    Dim Form() As Variant
    Form = Range("m2", "q49").Value
  3. Verwende eine doppelte Schleife: Da du auf die Indizes des Arrays zugreifen musst, um die Werte zu ändern:

    Dim LoI As Long
    Dim LoJ As Long
    For LoI = LBound(Form, 1) To UBound(Form, 1)
       For LoJ = LBound(Form, 2) To UBound(Form, 2)
           Form(LoI, LoJ) = UCase(Form(LoI, LoJ))
       Next LoJ
    Next LoI
  4. Schreibe die Änderungen zurück: Vergiss nicht, das bearbeitete Array zurück in den Zellbereich zu schreiben:

    Range("m2", "q49").Value = Form

Häufige Fehler und Lösungen

  • Fehler: Änderungen an der Schleifenvariable werden nicht im Array gespeichert.

    • Lösung: Verwende die Indizes des Arrays anstelle der For Each-Schleife, um direkt auf die Werte zuzugreifen.
  • Fehler: Das Array wurde nicht korrekt zurückgeschrieben.

    • Lösung: Stelle sicher, dass du nach den Änderungen das Array wieder in den Zellbereich schreibst.

Alternative Methoden

Wenn du die Werte in einem Array bearbeiten möchtest, kannst du auch die For Each-Schleife direkt über den Zellbereich verwenden. Hier ist ein Beispiel:

Dim c As Range
For Each c In Range("m2", "q49")
    c.Value = UCase(c.Value)
Next c

Diese Methode ist einfacher, da du die Werte direkt in den Zellen ändern kannst, ohne ein zusätzliches Array zu verwenden.


Praktische Beispiele

Hier sind einige praktische Beispiele, um deine Fähigkeiten im Umgang mit Arrays in Excel VBA zu erweitern:

  1. Konvertiere alle Werte in Großbuchstaben:

    Sub ConvertToUppercase()
       Dim c As Range
       For Each c In Range("m2", "q49")
           c.Value = UCase(c.Value)
       Next c
    End Sub
  2. Ersetze Umlaute durch Doppelvokale: Du kannst auch Formeln verwenden, um spezifische Texte zu ersetzen, anstatt VBA zu benutzen.


Tipps für Profis

  • Performance-Optimierung: Wenn du mit großen Datenmengen arbeitest, ist es effizienter, das gesamte Array einmalig zu lesen und alle Änderungen vorzunehmen, bevor du es zurückschreibst.

  • Fehlerüberprüfung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Probleme zu vermeiden, vor allem bei der Arbeit mit Zellbereichen.

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen explizit zu deklarieren, was zu weniger Fehlern führt und deinen Code robuster macht.


FAQ: Häufige Fragen

1. Warum kann ich For Each nicht direkt verwenden, um ein Array zu bearbeiten?
Die Schleifenvariable ist eine Kopie des Wertes, nicht des Array-Elements. Änderungen wirken sich nicht auf das Originalarray aus.

2. Wie kann ich die Werte in einem Array zurück in die Zellen schreiben?
Nach der Bearbeitung des Arrays musst du es wieder in den Zellbereich zuweisen, z.B. Range("m2", "q49").Value = Form.

3. Kann ich auch andere Datenarten in einem Array bearbeiten?
Ja, du kannst Arrays mit verschiedenen Datentypen verwenden, aber achte darauf, die entsprechenden Funktionen zu verwenden, um die Werte zu bearbeiten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige