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

Forumthread: Inhalt mehrerer Zellen als Variable speichern und

Inhalt mehrerer Zellen als Variable speichern und
09.10.2017 13:21:04
reiner
Hallo Leute,
die Inhalte mehrerer nebeneinanderliegender Zellen sollen in einer Variablen gespeichert werden, danach werden die Zellinhalte mit neuen Daten überschrieben.
Sollte sich jedoch herausstellen dass die zuvor überschriebenen Zellen in einer anderen Zeile in der gleichen Reihenfolge benötigt werden, sollten die Inhalte der Variablen in die neue Zeile eingefügt werden und den gleichen Zellbereich wie zuvor belegen.
Es ist mir zwar möglich den Inhalt mehrerer Zellen in einer Variablen zu speichern, aber durch welches Trennzeichen müssen die einzelnen Zellwerte voneinander getrennt sein damit sie bei Bedarf in der gleichen Reihenfolge eingefügt werden?
ist das überhaupt möglich?
mfg
reiner
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalt mehrerer Zellen als Variable speichern und
09.10.2017 13:34:21
yummi
Hallo reiner,
speichere dir die Inhalte der Zellen in einem array, dann kannst du bei Bedarf die einzelnen elemente des Arrays (welche jeweils eine Zelleninhalt entsprechen) zurückschreiben.
Ansonsten musst du dir selber ein Trennzeichen definieren (was nicht als Zellinhalt vorkommen darf) und das jeweils, nachdem du eine Zelle in deine Variable gespeichert hast, anhängen. Mit Split kannst du das ganze dan wieder bei Bedarf aufteilen.
Gruß
yummi
Anzeige
AW: Inhalt mehrerer Zellen als Variable speichern und
09.10.2017 13:57:33
reiner
hallo yummi,
danke für die Rückmeldung, aber so ganz kann ich dir nicht folgen.
Würdest du mir bitte anhand eines Beispiels zeigen wie du den jeweiligen Inhalt von Zelle "A1", "B1" und "C1" speicherst (möglichst als Variable, da ich zu wenig Erfahrung mit Arrays habe) sodass ich diese Variable in einer beliebigen Zeile erneut einfügen kann und die 3 nebeneinander liegenden Zellen den Inhalt enthalten wie ursprünglich in Zeile 1?
Wie müsste der VBA-Code aussehen?
mfg
reiner
Anzeige
AW: Inhalt mehrerer Zellen als Variable speichern und
09.10.2017 14:47:24
yummi
Hallo reiner,
hier mal ein kleines Bespiel, wen ndu in A1:A3 Werte hast. Die werden dan nach D1:D3 kopiert, kannst Du aber durch den Aufruf steuern.

Option Explicit
Sub test()
Dim var As String
Dim wks As Worksheet
Dim wkb As Workbook
Set wkb = ThisWorkbook
Set wks = wkb.Sheets("Tabelle1")
var = SpeichereZellen(wks, "A1:C1")
Call LadeZelle(wks, "D1:D3", var)
End Sub
Function SpeichereZellen(ByVal wks As Worksheet, ByVal rngstr As String) As String
Dim Retstr As String
Dim rng As Range
Dim Zelle As Object
Set rng = wks.Range(rngstr)
For Each Zelle In rng
Retstr = Retstr & Zelle.Value & ","
Next
SpeichereZellen = Left(Retstr, Len(Retstr) - 1)
End Function
Function LadeZelle(ByVal wks As Worksheet, ByVal rngstr As String, ByVal strMerke As String)
Dim rng As Range
Dim Zelle As Object
Dim arr() As String
Dim i As Integer
arr = Split(strMerke, ",")
Set rng = wks.Range(rngstr)
i = 0
For Each Zelle In rng
If i 
Gruß
yummi
Anzeige
AW: Inhalt mehrerer Zellen als Variable speichern und
09.10.2017 15:22:47
reiner
hallo yummi,
funktioniert super, aber ich verstehe nicht warum in der Funktion "LadeZelle..." die Variable "var" nicht mehr enthalten ist, dafür eine Variable "arr()"
geht das nicht auch einfacher?
mfg
reiner
AW: Inhalt mehrerer Zellen als Variable speichern und
09.10.2017 15:29:42
yummi
Hallo reiner,
dadurch das das array verwendet wird, kannst du die vba routine split benutzen, die dir einen String in Teilstrings aufteilt und diese dann in einem array liefert.
Du kannst natürlich auch bei der String Variablen var bleiben, nach einem "," suchen dan nmit mid den string ausscheiden, in die zelle schreiben und dann in der Variable var das nächste komma suchen und wieder ausschniden und speichern. Das sit das was split für dich übernimmt, nur eben liefert es dir ein Array (weil niemand zum Zeitpunkt des Programmierens weiß wiviel Elemente in deienm String drin sind.
Es geht beides, aber ob das andere wirklich einfacher ist, lass ich jetzt mal so dahingestellt.
Schau dir im debugger die einzelnen variablen an und versuch es zu verstehen.
Ansonsten braucht du Instr um das komma zu finden und Mid mit anfang und endposition zum ausschneiden, kannst du gern ausprobieren (einen lerneffekt hast du dabei auf jedenfall).
Gruß
yummi
Anzeige
AW: Inhalt mehrerer Zellen als Variable speichern und
09.10.2017 15:28:26
Christian
Hallo Reiner,
yummi hat dir ja bereits einen ausgefuchsten Code geliefert!
Wenn du in Sachen Array noch ein bisschen was lernen möchtest, kann ich dir diesen Artikel empfehlen:
https://excelmacromastery.com/excel-vba-array/
Ich habe hier noch eine simplere Umsetzung für dich.
Option Explicit
Sub BspArray()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Tabelle1")
' myArray als Variable vom Typ Variant deklarieren
' Werte aus Range() dem Array zuweisen
Dim myArray As Variant
myArray = ws.Range("A1:C1").Value
' Daten wieder einfügen
' Dafür muss der Bereich (Range) die gleiche Größe und Anordnung wie das Array haben.
' hier wird die Größe des Zielbereiches dynamisch ermittelt.
' Daten horizontal einfügen
ws.Range("A4").Resize(UBound(myArray, 1), UBound(myArray, 2)) = myArray
' Daten vertikal einfügen
ws.Range("A10").Resize(UBound(myArray, 2), UBound(myArray, 1)) = Application. _
WorksheetFunction.Transpose(myArray)
End Sub
VG, Christian
Anzeige
hallo Christian und yummi
09.10.2017 16:20:41
reiner
Der Lösungsvorschlag von yummi wirkt aus meiner Sicht sehr professionell,
aber Christians Vorschlag ist für mich eher nachvollziehbar und verständlicher; ist für meine Anwendung ausreichend
vielen Dank euch beiden
reiner
;
Anzeige
Anzeige

Infobox / Tutorial

Zelleninhalte in Variablen speichern und wiederherstellen


Schritt-für-Schritt-Anleitung

Um die Inhalte mehrerer Zellen in einer Variablen zu speichern und diese später wiederherzustellen, kannst du folgenden VBA-Code verwenden. Dieser Code zeigt dir, wie du den Inhalt der Zellen A1 bis C1 in einer Variable speicherst und später in die Zellen D1 bis D3 zurückschreibst.

Option Explicit
Sub test()
    Dim var As String
    Dim wks As Worksheet
    Set wks = ThisWorkbook.Sheets("Tabelle1")
    var = SpeichereZellen(wks, "A1:C1")
    Call LadeZelle(wks, "D1:D3", var)
End Sub

Function SpeichereZellen(ByVal wks As Worksheet, ByVal rngstr As String) As String
    Dim Retstr As String
    Dim rng As Range
    Dim Zelle As Object
    Set rng = wks.Range(rngstr)
    For Each Zelle In rng
        Retstr = Retstr & Zelle.Value & ","
    Next
    SpeichereZellen = Left(Retstr, Len(Retstr) - 1)
End Function

Function LadeZelle(ByVal wks As Worksheet, ByVal rngstr As String, ByVal strMerke As String)
    Dim rng As Range
    Dim Zelle As Object
    Dim arr() As String
    arr = Split(strMerke, ",")
    Set rng = wks.Range(rngstr)
    Dim i As Integer
    For Each Zelle In rng
        Zelle.Value = arr(i)
        i = i + 1
    Next
End Function

Häufige Fehler und Lösungen

Fehler: Die Zellen erscheinen leer, nachdem du die Werte zurückgeschrieben hast.
Lösung: Überprüfe, ob der Bereich, in den du die Daten schreibst, die gleiche Größe wie die ursprüngliche Zellreihe hat. Außerdem solltest du sicherstellen, dass die Variable, die du gespeichert hast, korrekt ist.

Fehler: Der Code führt zu einem Laufzeitfehler.
Lösung: Stelle sicher, dass du die richtigen Zellreferenzen und den richtigen Arbeitsblattnamen verwendest. Achte darauf, dass die Zellen existieren und nicht gelöscht wurden.


Alternative Methoden

Eine einfachere Methode, um mehrere Zellwerte zu speichern, ist die Verwendung eines Arrays. Hier ist ein Beispiel:

Sub BspArray()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Tabelle1")
    Dim myArray As Variant
    myArray = ws.Range("A1:C1").Value
    ws.Range("A4").Resize(UBound(myArray, 1), UBound(myArray, 2)) = myArray
End Sub

Diese Methode deklariert die Variable myArray als Variant, was es dir erlaubt, die Zellwerte einfach zu speichern und wiederherzustellen.


Praktische Beispiele

  1. Inhalt einer Zeile speichern und in eine andere Zeile kopieren: Wenn du die Werte von A1:C1 in D1:D3 kopieren möchtest, kannst du den oben genannten Code verwenden.

  2. Vertikale und horizontale Datenübertragung: Du kannst auch die Transpose-Funktion verwenden, um die Daten von horizontal nach vertikal zu übertragen. Dies wird im Beispiel von Christian gezeigt.


Tipps für Profis

  • VBA mehrere Variablen deklarieren: Du kannst mehrere Variablen in einer Zeile deklarieren, um den Code kompakter zu gestalten:

    Dim var1 As String, var2 As String, var3 As String
  • VBA Split mehrere Trennzeichen: Wenn du mehrere Trennzeichen verwenden möchtest, kannst du die Split-Funktion kombinieren, um verschiedene Trennzeichen zu verarbeiten. Hierbei ist es wichtig, die Logik für die Trennung der Werte gut zu planen.

  • Debugging: Nutze den Debugger, um die Werte deiner Variablen in jedem Schritt zu überprüfen. Dies hilft dir, Probleme schnell zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich den Zellwert in einer Variablen speichern?
Du kannst den Wert einer Zelle einfach einer String-Variable zuweisen, zum Beispiel:

Dim zellwert As String
zellwert = Range("A1").Value

2. Kann ich mehrere Zellinhalte in einer Variable speichern?
Ja, du kannst die Zellinhalte durch ein Trennzeichen, wie ein Komma, zusammenfügen und in einer String-Variable speichern. Verwende dazu eine Schleife, um die Werte zu concatenieren.

3. Ist es möglich, die Daten in einer bestimmten Reihenfolge wiederherzustellen?
Ja, indem du die Daten zuerst in einem Array speicherst, kannst du die Reihenfolge einfach beibehalten und wiederherstellen.

4. Wie mache ich, wenn ich unterschiedliche Zellbereiche speichern und wiederherstellen möchte?
Du kannst die Funktion SpeichereZellen anpassen, um verschiedene Zellbereiche zu verarbeiten, indem du die entsprechenden Zellreferenzen übergibst.

5. Was ist der Vorteil der Verwendung von Arrays?
Arrays sind besonders nützlich, wenn du mit einer größeren Anzahl von Daten arbeitest und die Flexibilität benötigst, um dynamisch auf die Daten zuzugreifen. Sie ermöglichen es, mehrere Variablen effizient zu speichern und zu verwalten.

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