Microsoft Excel

Herbers Excel/VBA-Archiv

Text in Array speichern und auslesen

Betrifft: Text in Array speichern und auslesen von: Stefanie
Geschrieben am: 06.10.2014 12:49:19

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!

  

Betrifft: AW: Text in Array speichern und auslesen von: Martin
Geschrieben am: 06.10.2014 13:45:09

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


  

Betrifft: Ergänzung von: Martin
Geschrieben am: 06.10.2014 15:14:43

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


  

Betrifft: AW: Ergänzung von: Stefanie
Geschrieben am: 07.10.2014 11:11:34

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.


  

Betrifft: AW: Text in Array speichern und auslesen von: Stefanie
Geschrieben am: 07.10.2014 11:15:23

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


  

Betrifft: AW: Text in Array speichern und auslesen von: Daniel
Geschrieben am: 07.10.2014 11:19:40

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


  

Betrifft: AW: Text in Array speichern und auslesen von: Stefanie
Geschrieben am: 07.10.2014 11:38:15

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


  

Betrifft: AW: Text in Array speichern und auslesen von: Daniel
Geschrieben am: 07.10.2014 11:52:19

Hi
wie sieht den die Problemstellung konkret aus?
kannst du mal ne Beispieldatei hochladen und kennzeichnen was wohin kopiert werden soll?

Gruß Daniel


  

Betrifft: AW: Text in Array speichern und auslesen von: Stefanie
Geschrieben am: 07.10.2014 12:04:27

Gern ich hoffe das ist verständlich so:
https://www.herber.de/bbs/user/92999.xlsx


  

Betrifft: AW: Text in Array speichern und auslesen von: Daniel
Geschrieben am: 07.10.2014 14:02:04

HI

unter verwendung einer Hilfstabelle mit einfachen Formeln:
https://www.herber.de/bbs/user/93005.xlsx

Gruß Daniel


  

Betrifft: AW: Text in Array speichern und auslesen von: Stefanie
Geschrieben am: 07.10.2014 14:07:04

Aber ohne VBA :-)


  

Betrifft: AW: Text in Array speichern und auslesen von: Daniel
Geschrieben am: 07.10.2014 14:55:19

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


 

Beiträge aus den Excel-Beispielen zum Thema "Text in Array speichern und auslesen"