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

Forumthread: Text in Array speichern und auslesen

Text in Array speichern und auslesen
06.10.2014 12:49:19
Stefanie
Guten Tag,
wie das mit dem Array funktioniert wurde mir hier in dem Forum schon super klasse erklärt. Vielen dank nochmals dafür! Nun meine Frage:
Hätte jemand ein kleines Beispiel für mich wie ich meine Kopie
 Cells(3, lSpalte + 1).Copy
in einem Array speicher und diese dann in einem neuen Tabellenblatt wieder einfüge?
Quasi im Array die Copy speichern und dann an einer anderen Stelle wieder auslese?
Ich mache dies immer mit Einzelschritten, da ich aber manchmal mehrmals Copy ausführen muss, würde ich diese gerne erst in einem Array speichern und später dann nacheinander auslesen (zwecks Performance).
Vielen lieben Dank!

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text in Array speichern und auslesen
06.10.2014 13:45:09
Martin
Hallo Stefanie,
bei deinem Beispiel braucht man kein Array, eine einzelne Zelle kannst du auch einer einzelnen variablen zuweisen. Hier mal ein Beispiel mit einem Zellbereich A1 bis C3:
Sub Beispiel()
Dim varArray As Variant
'Zellbereich einem Array zuweisen
varArray = Range("A1:C3").Value
'Anderen Zellbereich mit Array füllen
Range("A4").Resize(UBound(varArray, 1), UBound(varArray, 2)) = varArray
End Sub
Viele Grüße
Martin

Anzeige
Ergänzung
06.10.2014 15:14:43
Martin
Hallo Stefanie,
du kannst Zelleninhalte übrigens auch direkt kopieren, ohne die Daten in einer Variable "zwischenlagern" zu müssen.
Beispiel:
Sub Beispiel()
'Inhalt aus einzelner Zelle kopieren
Sheets(3).Range("A1") = Sheets(2).Range("C5").Value
'Zellenbereich kopieren
Sheets(1).Range("A1:C3").Copy (Sheets(3).Range("A5"))
End Sub
Viele Grüße
Martin

Anzeige
AW: Ergänzung
07.10.2014 11:11:34
Stefanie
Vielen dank zunächst für deine Hilfe. Ist diese Variante schneller?
Also ich suche eben in mehreren Zeilen nach einem "x", wenn eines gefunden wurde, sollen bestimmte Texte kopiert werden. Das können ziemlich viele sein. Da ich dies ja gerade folgendermaßen mache:
Suche X, wenn gefunden, kopiere Zelle, wechsle Tabellenblatt und füge ein
Natürlich dauert dies zu lange.
Daher dachte ich durch einen Array kann ich dieses hin und her springen ersteinmal verhindern, da ich dann erst zum Schluss alles in das andere Tabellenblatt kopiere.

Anzeige
AW: Text in Array speichern und auslesen
07.10.2014 11:15:23
Stefanie
Aber wenn ich ein einem Tabellenblatt, ziemliche viele Texte habe ist ein Array doch sinnvoll oder? Dann kann ich alle Texte erst einmal darin ablegen und dann erst in ein neues Tabellenblatt wechseln und alle Inhalte gleichzeitig einfügen?
Oder sehe ich das falsch ? :-(
Viele Grüße

Anzeige
AW: Text in Array speichern und auslesen
07.10.2014 11:19:40
Daniel
HI
kann man prinizipell machen, ist aber auch nicht schneller als die Werte komplett zu kopieren.
Wenn du die Zellbereiche direkt ansprichst, dann brauchst du ja auch nicht zwischen den Blättern zu wechseln.
Auch ist ein Copy-PasteSpecial gerade bei grossen Datenmengen schneller als das Einlesen und Schreiben in und aus einer Variablen.
Gruß Daniel

Anzeige
AW: Text in Array speichern und auslesen
07.10.2014 11:38:15
Stefanie
Genau aber das Problem ist, dass ich in einer Zeile nach einem "X" suche, wenn eins gefunden wurde dann muss ein bestimmter Text kopiert werden. Zu jedem gefundenen "X" gibts quasi einen anderen Text. Desewgen kann ich nicht einfach einen Bereich kopieren.
Ist das verständlich? Wie kann ich dieses Problem lösen?
Danke dir! VG

Anzeige
AW: Text in Array speichern und auslesen
07.10.2014 11:52:19
Daniel
Hi
wie sieht den die Problemstellung konkret aus?
kannst du mal ne Beispieldatei hochladen und kennzeichnen was wohin kopiert werden soll?
Gruß Daniel

AW: Text in Array speichern und auslesen
07.10.2014 12:04:27
Stefanie
Gern ich hoffe das ist verständlich so:
https://www.herber.de/bbs/user/92999.xlsx

Anzeige
AW: Text in Array speichern und auslesen
07.10.2014 14:07:04
Stefanie
Aber ohne VBA :-)

AW: Text in Array speichern und auslesen
07.10.2014 14:55:19
Daniel
hi
warum VBA, wenns mit zwei einfachen Formeln funktioniert?
zum Vergleich der benötigte VBA-Code
Sub test()
Dim arrM
Dim arrG
Dim arrX
Dim Erg
Dim z As Long
Dim s As Long
With Sheets("Tabelle1")
arrG = .Range(.Cells(4, 1), .Cells(4, 1).End(xlDown))
arrM = .Range(.Cells(2, 2), .Cells(2, 2).End(xlToRight))
arrX = .Range(.Cells(4, 2), .Cells(.Cells(4, 1).End(xlDown).Row, .Cells(2, 2).End(xlToRight) _
.Column))
ReDim Erg(1 To UBound(arrG, 1), 1 To 2)
End With
For z = 1 To UBound(arrG, 1)
For s = 1 To UBound(arrM, 2)
Erg(z, 1) = arrG(z, 1)
If arrX(z, s) = "x" Then
Erg(z, 2) = Erg(z, 2) & vbLf & arrM(1, s)
End If
Next
If Len(Erg(z, 2)) > 0 Then Erg(z, 2) = Mid$(Erg(z, 2), 2)
Next
Sheets("Tabelle2").Cells(2, 1).Resize(UBound(Erg, 1), 2).Value = Erg
End Sub

zum Vergleich nochmal der VBA-Code den du brauchst, um die Formel-Lösung zu realisieren:
Sub test2()
Sheets("Tabelle1").Cells.Copy Sheets("Tabelle3").Cells(1, 1)
With Sheets("Tabelle3")
With .Range(.Cells(4, 2), .Cells(.Cells(4, 1).End(xlDown).Row, .Cells(2, 2).End(xlToRight). _
Column))
.FormulaR1C1 = "=IF(Tabelle1!RC=""x"", Tabelle1!R2C,"""")&IF(RC[1]"""",CHAR(10),"""")& _
RC[1]"
End With
.Range(.Cells(4, 1), .Cells(4, 1).End(xlDown).Offset(0, 1)).Copy
Sheets("Tabelle2").Cells(2, 1).PasteSpecial xlPasteValues
End With
End Sub
braucht deutlich weniger Zeilen und ist vorallem dann viel angenehmer, wenn du den Code im Einzelstep testen musst.
Viel langsamer ist es wahrscheinlich auch nicht.
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Text in Array speichern und auslesen


Schritt-für-Schritt-Anleitung

Um Daten in einem Array zu speichern und diese später in ein neues Tabellenblatt einzufügen, kannst du folgenden VBA-Code verwenden:

Sub Beispiel()
    Dim varArray As Variant
    ' Zellbereich einem Array zuweisen
    varArray = Range("A1:C3").Value
    ' Anderen Zellbereich mit Array füllen
    Range("A4").Resize(UBound(varArray, 1), UBound(varArray, 2)) = varArray
End Sub

In diesem Beispiel wird der Zellbereich A1:C3 in ein Array gespeichert und anschließend in den Bereich ab A4 eingefügt.

Wenn du spezifische Zellen suchen und diese kopieren möchtest, kannst du den Code anpassen, um die Zellen zu durchlaufen und die gewünschten Werte zu speichern.


Häufige Fehler und Lösungen

  1. Fehler: "Typen unverträglich"

    • Lösung: Überprüfe, ob der Zellbereich korrekt definiert ist und tatsächlich Werte enthält, die in ein Array geladen werden können.
  2. Fehler: "Bereich außerhalb der Matrix"

    • Lösung: Stelle sicher, dass du UBound so verwendest, dass es die Dimensionen des Arrays korrekt abruft.
  3. Fehler: Kopierte Werte erscheinen nicht im Zielbereich

    • Lösung: Überprüfe, ob der Zielbereich korrekt dimensioniert ist, um die Werte des Arrays aufzunehmen.

Alternative Methoden

Es gibt verschiedene Ansätze, um Daten in Excel zu kopieren, ohne ein Array zu verwenden:

  • Direktes Kopieren: Du kannst Zellinhalte direkt kopieren, ohne sie in einer Variablen zwischenzuspeichern.

    Sub DirektKopieren()
      Sheets(3).Range("A1") = Sheets(2).Range("C5").Value
    End Sub
  • Kopieren mit PasteSpecial: Diese Methode kann besonders bei großen Datenmengen effizienter sein.

    Sheets(1).Range("A1:C3").Copy
    Sheets(3).Range("A5").PasteSpecial

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du ein Array nutzen kannst, um spezifische Texte zu kopieren, wenn ein bestimmtes Kriterium (z.B. das Vorhandensein eines "X") erfüllt ist.

Sub TextKopieren()
    Dim arrG As Variant
    Dim arrM As Variant
    Dim Erg() As Variant
    Dim z As Long
    Dim s As Long

    With Sheets("Tabelle1")
        arrG = .Range(.Cells(4, 1), .Cells(4, 1).End(xlDown)).Value
        arrM = .Range(.Cells(2, 2), .Cells(2, 2).End(xlToRight)).Value
        ReDim Erg(1 To UBound(arrG, 1), 1 To 2)
    End With

    For z = 1 To UBound(arrG, 1)
        For s = 1 To UBound(arrM, 2)
            If arrG(z, 1) = "x" Then
                Erg(z, 1) = arrG(z, 1)
                Erg(z, 2) = arrM(1, s)
            End If
        Next
    Next

    Sheets("Tabelle2").Cells(2, 1).Resize(UBound(Erg, 1), 2).Value = Erg
End Sub

In diesem Beispiel wird jeder Text, der mit einem "X" assoziiert ist, in das neue Tabellenblatt kopiert.


Tipps für Profis

  • Nutze Application.ScreenUpdating = False, um die Bildschirmaktualisierung während der Ausführung deines Codes zu deaktivieren. Das kann die Geschwindigkeit erheblich erhöhen.

  • Verwende Option Explicit am Anfang deiner Module. Dies zwingt dich dazu, Variablen zu deklarieren, was die Fehlersuche erleichtert.

  • Wenn du mit großen Datenmengen arbeitest, ist es oft sinnvoller, die Daten einmal zu kopieren statt mehrmals durch das Arbeitsblatt zu springen.


FAQ: Häufige Fragen

1. Frage
Wie kann ich ein Array effizient in ein neues Tabellenblatt übertragen?
Antwort: Du kannst das gesamte Array auf einmal in das Zielblatt übertragen, indem du den Zielbereich entsprechend dimensionierst und die Werte zuweist.

2. Frage
Ist es schneller, Daten in ein Array zu speichern oder direkt zu kopieren?
Antwort: Bei kleinen Datenmengen ist das direkte Kopieren oft schneller. Bei großen Datenmengen kann die Verwendung eines Arrays jedoch die Performance verbessern, da weniger Interaktionen mit dem Arbeitsblatt erforderlich sind.

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