Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bereich in array kopieren

Bereich in array kopieren
02.01.2020 23:13:06
Barbara
Hallo
habe Fragen zum array. In meinem Beispielmakro werden erst A1:A3 befüllt, um mal eine Versuchsanordnung herzustellen (für alle, die keine Datei mit Makros aus dem Internet öffnen wollen).
Dann wird dieser Bereich über ein array in den Nachbarbereich B1:B3 kopiert. Dabei wird seltsamerweise auch das Format der Zelle B1 mitkopiert, für C1 aber nicht.
Warum wird das Format von B1 mitkopiert? Im Array selbst ist nichts von einem Format zu sehen.
Hier das Makro
Sub Zahlenformat()
Dim sFeld()
Dim rBereich As Range
Set rBereich = Range("A1:A3")
rBereich.Clear
rBereich.Offset(0, 1).Clear
'Zellen A1:A3 werden befüllt
rBereich(1) = 3
rBereich(1).NumberFormat = "General"
rBereich(2) = 3
rBereich(2).NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
rBereich(3) = 43557
rBereich(3).NumberFormat = "yyyymmdd"
'Ende der Vorbereitung
ReDim sFeld(3)
sFeld = rBereich
rBereich.Offset(0, 1) = sFeld
'    sFeld = rBereich.NumberFormat  ---> Das geht leider nicht
End Sub
LG,
Barbara
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich in array kopieren
03.01.2020 05:51:13
Luschi
Hallo Barbara,
das Array übernimmt für jeden Zellenwert nur den Standarddatentyp für Zahl, Währung und Datum.
Ändere mal den Wert/Formatierung in A2 so:
rBereich(2) = -3
rBereich(2).NumberFormat = "$#,##0.000_);[Red]($#,##0.0000)"
dann siehst Du, daß in A2 die negative Zahl in Klammern und ohne Minuszeichen mit
4 Nachkommastellen und in rot dargestellt wird.
In B2 steht aber: -3,00 € - nix rot, keine Klammern, nur 2 Nachkommastellen
Eben nur der in Windows/Excel definierte Standard.
Gruß von Luschi
aus klein-Paris
PS: Schalte im Vba-Editor das Überwachungsfenster ein (Ansicht-Überwachungsfenster,
markiere sFeld im Vba-Code, rechte Maustaste, Überwachung hinzufügen
Dann kann man im Einzelschrittmodus (F8-Taste) nachvollziehen, was im/mit dem Array passiert.
Anzeige
AW: Bereich in array kopieren
03.01.2020 11:43:03
Barbara
Hallo Luschi,
danke für Deine Antwort.
Tatsächlich: im Überwachungsfenster bei jdem Feldeintrag auch der Standarddatentyp notiert. Das habe ich nicht gesehen.
Kann man den auch irgendwie in sFeld abrufen und dort vielleicht auch ändern?
AW: Bereich in array kopieren
03.01.2020 21:54:28
onur
sFeld ist eine Variable und befindet sich im Speicher.
rBereich ist ein Bereich, der sich auf der Excel-Tabelle befindet (eigentlich mehr eine Spiegelung des Bereiches auf der Tabelle, mitsamt aller seiner Eigenschaften).
Bereiche und Zellen haben Eigenschaften wie Zellformat, Hintergrund- und Schriftfarbe usw.
Aber Variablen wie sFeld haben keine solchen Eigenschaften, nur Inhalte.
Anzeige
AW: Bereich in array kopieren
03.01.2020 22:24:37
Barbara
OK. Aber im Inhalt des Arrays muss wohl auch die Formatierung stehen, denn sie wird ja bei
rBereich.Offset(0, 1) = sFeld
mitübertragen.
Darauf bezieht sich meine letzte Frage.
AW: Bereich in array kopieren
04.01.2020 22:18:36
onur
Wenn du das glaubst, dann formatiere B1 doch mit "$#,##0.00_);[Red]($#,##0.00)" (tausche Formatierung von A1 und A2) und schaue, was passiert.
Anzeige
AW: Bereich in array kopieren
05.01.2020 00:13:31
Barbara
Hab ich gemacht. Dann sind eben die Zeilen 1 und 2 vertauscht, was die Formatierung betrifft.
Mit dem Einfügen des Arrays wird auch die Währungsformatierung eingefügt.
Ich weiß nicht genau, was Du damit sagen willst.
AW: Bereich in array kopieren
05.01.2020 00:15:23
onur
Seltsam - kannst du die (Beispiels-)Datei posten?
AW: Bereich in array kopieren
05.01.2020 00:26:39
Barbara
Warum Beispieldatei?
Nimm ein leeres Excel-Sheet, kopieren meine Code rein und lass ihn einmal durchlaufen.
Aber bitte, hier die Datei. Vielleicht liegt da wirklich der Hund begraben.
Anzeige
AW: Bereich in array kopieren
05.01.2020 00:27:15
onur
Wo?
AW: Bereich in array kopieren
05.01.2020 00:30:58
Barbara
Sorry, hat irgendwie nicht funktioniert. Aber das Hochladeformular sieht jetzt ganz anders aus.
Hier der Link:
https://www.herber.de/bbs/user/134164.xlsm
LG,
Barbara
AW: Bereich in array kopieren
05.01.2020 01:00:34
onur
Jetzt weiss ich, was du meinst.
Wie gesagt werden (geht ja auch nicht) Formate NICHT mitkopiert. Da Date und Currency eigene Variablentypen sind und sFeld automatisch als Variant dimensioniert wird (da nix angegeben), sieht es nur so aus, als ob die Formate mitkopiert wurden, da das Datum als Date und die Währung als Currency erkannt und so im Array abgespeichert werden.
Du verwechselt da Datentyp mit Zellformat.
Hier siehst du es besser:
https://www.herber.de/bbs/user/134165.xlsm
Anzeige
AW: Bereich in array kopieren
05.01.2020 17:07:48
Barbara
Damit
"Du verwechselt da Datentyp mit Zellformat."
wird alles klar.
Jetzt verstehe ich Dich (und auch Luschi aus Klein-Paris).
Damit kann ich an meinem eigentlichen Problem arbeiten. Hab dazu im Forum eine neue Frage gestellt.
Danke Euch.
LG, Barbara
;
Anzeige
Anzeige

Infobox / Tutorial

Bereich in Array kopieren in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne den VBA-Editor in Excel (drücke ALT + F11).
  2. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (deineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub Zahlenformat()
       Dim sFeld()
       Dim rBereich As Range
       Set rBereich = Range("A1:A3")
       rBereich.Clear
       rBereich.Offset(0, 1).Clear
       'Zellen A1:A3 werden befüllt
       rBereich(1) = 3
       rBereich(1).NumberFormat = "General"
       rBereich(2) = 3
       rBereich(2).NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
       rBereich(3) = 43557
       rBereich(3).NumberFormat = "yyyymmdd"
       'Ende der Vorbereitung
       ReDim sFeld(3)
       sFeld = rBereich
       rBereich.Offset(0, 1) = sFeld
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Problem: Das Format der Zellen wird nicht korrekt kopiert.

    • Lösung: Beachte, dass Formate wie Währung oder Datum nicht in Arrays gespeichert werden. Mit dem Befehl sFeld = rBereich werden nur die Werte, nicht jedoch die Formate kopiert.
  • Problem: Negative Zahlen werden nicht richtig dargestellt.

    • Lösung: Ändere die Formatierung in der Zelle A2 zu einer negativen Zahl und beobachte die Ausgabe in der Zelle B2.

Alternative Methoden

Anstelle des Arrays kannst Du auch die Value-Eigenschaft verwenden, um die Werte zu kopieren:

Range("B1:B3").Value = Range("A1:A3").Value

Dies kopiert nur die Werte ohne Formatierungen. Wenn Du auch das Format übernehmen möchtest, musst Du dies separat tun.


Praktische Beispiele

Hier ein einfaches Beispiel, um Werte aus einem Bereich in ein Array zu kopieren und dann in einen anderen Bereich zu übertragen:

Sub BeispielKopieren()
    Dim sFeld() As Variant
    Dim rBereich As Range
    Set rBereich = Range("A1:A3")
    ReDim sFeld(1 To rBereich.Cells.Count)

    Dim i As Integer
    For i = 1 To rBereich.Cells.Count
        sFeld(i) = rBereich.Cells(i).Value
    Next i

    Range("B1:B3").Value = sFeld
End Sub

Dieses Beispiel zeigt, wie Du die Werte in ein Array einfügen und dann in einen anderen Bereich kopieren kannst.


Tipps für Profis

  • Überwachungsfenster aktivieren: Im VBA-Editor kannst Du das Überwachungsfenster aktivieren, um die Werte und Datentypen in Echtzeit zu überprüfen. Dies hilft, Fehler schneller zu identifizieren.

  • Debugging: Nutze den Einzelschrittmodus (F8), um den Code Zeile für Zeile durchzugehen. So siehst Du genau, was mit den Variablen und Arrays passiert.

  • Makros speichern: Achte darauf, Deine Excel-Datei im .xlsm-Format zu speichern, damit die Makros erhalten bleiben.


FAQ: Häufige Fragen

1. Warum wird das Format nicht mitkopiert?
Das Format wird nicht in Arrays gespeichert, da Arrays nur die Werte und keinen Zellformattyp enthalten.

2. Wie kann ich die Werte und das Format gleichzeitig kopieren?
Du musst die Werte und Formate separat kopieren. Zuerst die Werte mit Value und dann die Formate mit NumberFormat.

3. Ist das Beispiel auch in Excel 365 anwendbar?
Ja, die gezeigten Methoden sind in jeder modernen Excel-Version anwendbar, die VBA unterstützt.

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