Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Array komplett in Range schreiben

VBA: Array komplett in Range schreiben
26.09.2004 18:13:38
Christian
Hallo zusammen,
ich habe ein Verständnisproblem mit Arrays und hoffe mal wieder auf eure geniale Hilfe...
Ich lese aus Spalte A alle unterschiedlichen Einträge in ein Array ein. Das klappt soweit.
Doch was ich nicht hinbekomme ist, dieses Datenfeld komplett (auf einen Schlag)
in Spalte C zu schreiben. Ich würde mir gerne eine For-Schleife ersparen, die jeden einzelnen Array-Wert abarbeitet.
Kann mir jemand auf die Sprünge helfen?
vielen Dank vorab
Christian
(den untenstehen Code zum Einlesen der Werte in den Array habe ich mir aus diversen Beiträgen aus dem Archiv zusammengebastelt, kann also durchaus sein, dass dieser durch meine "Bastelei" nicht der eleganteste ist...auch hier wäre ich für Verbesserungsvorschläge dankbar)
Option Explicit

Sub TestArray()
Dim arrList(), vgl
Dim i As Integer
Dim k As Integer
With Sheets("Tabelle1")
'Array füllen
k = 0
ReDim arrList(0)
For i = 2 To 20
vgl = Application.Match(.Cells(i, 1), arrList, 0)
If IsError(vgl) Then
ReDim Preserve arrList(k)
arrList(k) = .Cells(i, 1)
k = k + 1
End If
Next i
'Array in Spalte C schreiben:
'HIERZU SUCHE ICH DIE RICHTIGE LÖSUNG...
.Range("C2:C" & UBound(arrList) + 2) = arrList
'BRINGT NUR DEN ERSTEN ARRAY-WERT
End With
End Sub


Anzeige
AW: VBA: Array komplett in Range schreiben
NE
Hi Christian,
unprobiert:
range(cells(1,3),cells(ubound(arrlist),3)=arrlist
wobei, das Redim Preserve brauchst Du eigentlich in dem Falle nicht ;-)
lg Nancy
AW: VBA: Array komplett in Range schreiben
NE
sorry, da fehlte wohl eine schliessende Klammer am Ende:
range(cells(1,3),cells(ubound(arrlist),3))=arrlist
Danke...aber...
26.09.2004 19:01:06
Christian
Hallo Nancy,
ich hab im Beitrag von K.Rola eine Bsp-Datei auf den Server geschickt.
Deine Lösung ist doch sehr ähnlich wie mein Ansatz, allerdings bringt sie auch nur in allen Zellen den ersten Array-Wert.
auf jeden Fall vielen Dank, vielleicht schaust du dir ja mal die Datei an - und findest noch ne Lösung.
viele Grüße
Christian
Anzeige
AW: VBA: Array komplett in Range schreiben
K.Rola
Hallo,
lad doch mal ein Beispiel hoch, dann muss man das nicht nachbauen.
Gruß K.Rola
Bsp-Datei
26.09.2004 18:52:33
Christian
Hallo K.Rola, hallo Nancy
hier eine Bsp-Datei
(Die Lösung von Nancy bringt ebenso wie mein Versuch nur den ersten Array-Wert)
https://www.herber.de/bbs/user/11324.xls
vielen Dank für eure Hilfe
Christian
Anzeige
Transpose - da wär ich ja nie drauf gekommen...
26.09.2004 19:24:50
Christian
Hallo K.Rola,
vielen Dank!
auf meiner Suche, möglichst wenig For-Schleifen zu verwenden, hast du mich einen entscheiden Schritt weitergebracht.
merci
Gruß
Christian
Anzeige
AW: VBA: Array komplett in Range schreiben
Reinhard
Hi Christian,

Sub tt()
Dim Werte(500, 0)
Dim Rng As Range
For i = 1 To 500
Werte(i, 0) = i
Next i
Set Rng = Range(Cells(1, 1), Cells(UBound(Werte), 1))
Rng = Werte
End Sub

Gruß
Reinhard
AW: VBA: Array komplett in Range schreiben
K.Rola
Hallo,
der Array sollte dynamisch sein!
Gruß K.Rola
Anzeige
AW: VBA: Array komplett in Range schreiben
Reinhard
Hallo K.Rola,
hast wieder mal Recht.
Ich kriegs nicht zum Laufen mit seinem EinlesCode und meinem Ausgebcode.
Gruß
Reinhard
AW: VBA: Array komplett in Range schreiben
K.Rola
Hallo,
sieh dir die Datei an, die ich für ihn hochgeladen habe.
Gruß K.Rola
AW: VBA: Array komplett in Range schreiben
Reinhard
Hallo K.Rola,
klar, habe ich, perfekt wie immer, aber bin Sturkopf, viele Beulen am Kopf von den dicken Wänden wo ich durchwill und die nicht nachgeben :-)
Soll bedeuten, ich schnapp begierig jede Info von dir nepumuk, boris und sehr vielen andern hier auf, aber das abschreiben von code bringt mir wenig, ich will ein Problem selbst lösen, mit meinem punktuellen, absolut nicht Grundlagengestützem Wissen.
Klar, gibt viele Beulen, bzw viele Stunden des fluchenden Ausprobierens, weil meine Logik und die von Excel nicht harmonieren, eher selten, aber macht trotzdem Spass.
Gesamtexcelmäßig gesehen bin ich eine Niete, aber das relativiert sich wenn ich manche Anfragen hier lesen von Leuten, wo ich anhand der Fragestellung erkenne, die kriegen Geld um ihre Arbeit mit Excel zu erledigen, haben aber aber kwasi Null Ahnung.
Da könnte ich, mit meiner Excelausbildung die darin besteht das ich hier durch Fragen beantworten dieses Ding "Excel" zu kapieren versuche, sogar Schulungen geben*g
Um noch mal das vom Anfang zu erläutern, ich bin handwerklich gut. Excel ist nicht mein Ding, Privatvergnügen ohne Sinn, denn ich brauchs an sich nie.
Du und nepumuk und boris u.a. arbeitet täglich mit Excel *unterstell*
Jetzt der Fall, du willst deine Wohnung streichen , Parkett legen, sonstwas. Sicher ich wäre sauberer , schneller usw (sowie du perfekter Code schreibst) aber du willst das selbst machen, nimmst zwar meine Tipps zur Kenntnis, aber legst einfach los und bist dann so stolz wennn dein selbst gelegtes Parkett liegt, das gleiche Gefühl wie ich wenn mein Code läuft. Mir ist dann egal ob option explizit , sprechende Variablennamen oder Optimierung stimmt. Mein Code läuft hat Priorität*g Dito für dein Parkett liegt.
Und im Notfall poste ich hier @K.Rola Hilfe, mein Code läift nicht, bzw andersrum rufste mich an wenns beim Parkett klemmt.
Wer Rechtschreibfehler, Unlogiken entdeckt, darf sie behalten:-) *freigiebig bin*
Lieben Gruß
Reinhard
Anzeige
AW: VBA: Array komplett in Range schreiben
K.Rola
Hallo,
Mann, das ist ja eine Kurzgeschichte.
Ich kann dich gut verstehen, denn mir gehts ähnlich. Beruflich habe ich eigenlich nichts
mit Excel zu tun, außer dass ich öfter mal Schulungen mache aber nicht nur Excel.
Mein eigentlicher Beruf hat damit überhaupt nichts zu tun. Da ich freiberuflich bin,
ist die Geschichte rund um den PC ein zweites Standbein. Programmieren hab ich bei
SAP/ABAP gelernt, ist aber stinklangweilig. VB und VBA machen mehr Spaß, weil man
da mehr oder weniger nützliche Programme erstellen kann, was in ABAP nun gar nicht geht.
So, da wars erstmal.
Gruß K.Rola
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Array komplett in Range schreiben


Schritt-für-Schritt-Anleitung

Um ein Array in einen Excel Range zu schreiben, kannst Du die folgenden Schritte befolgen:

  1. Array deklarieren und füllen: Zuerst musst Du ein Array erstellen und mit Werten füllen. Hier ein Beispiel, das die Werte aus Spalte A in ein Array einliest:

    Sub TestArray()
       Dim arrList() As Variant
       Dim i As Integer
       Dim k As Integer
       With Sheets("Tabelle1")
           k = 0
           ReDim arrList(0)
           For i = 2 To 20
               If Application.WorksheetFunction.CountIf(arrList, .Cells(i, 1).Value) = 0 Then
                   ReDim Preserve arrList(k)
                   arrList(k) = .Cells(i, 1).Value
                   k = k + 1
               End If
           Next i
  2. Array in Range schreiben: Um das Array in einen Range zu schreiben, kannst Du den Code wie folgt anpassen:

           'Array in Spalte C schreiben
           .Range("C2").Resize(UBound(arrList) + 1, 1).Value = Application.Transpose(arrList)
       End With
    End Sub

    Hierbei wird die Funktion Transpose verwendet, um das Array korrekt in die Zellen zu schreiben.


Häufige Fehler und Lösungen

  • Problem: Das Array wird nicht korrekt in den Range geschrieben, und es erscheint nur der erste Wert.

    • Lösung: Achte darauf, dass Du die Transpose-Funktion verwendest, um das Array in den vertikalen Range zu übertragen, wie im obigen Beispiel gezeigt.
  • Problem: Redim Preserve wird nicht benötigt.

    • Lösung: Du kannst Redim Preserve weglassen, wenn Du sicher bist, dass die Array-Größe vor dem Hinzufügen neuer Werte festgelegt werden kann.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, ein Array in einen Excel Range zu schreiben. Eine gängige Methode ist die Verwendung von VBA Range direkt:

Sub AlternativeMethode()
    Dim Werte(1 To 500) As Variant
    Dim i As Integer
    For i = 1 To 500
        Werte(i) = i
    Next i
    Range("A1:A500").Value = Application.Transpose(Werte)
End Sub

In diesem Beispiel wird ein Array mit Werten von 1 bis 500 erstellt und dann in den Range A1 bis A500 geschrieben.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du vba range to array und array to range vba in Deinen Projekten nutzen kannst:

  1. Einen Bereich in ein Array einlesen:

    Dim myArray As Variant
    myArray = Application.Transpose(Range("A1:A10").Value)
  2. Ein Array in einen bestimmten Bereich schreiben:

    Dim outputArray(1 To 10) As Variant
    For i = 1 To 10
       outputArray(i) = "Wert " & i
    Next i
    Range("B1:B10").Value = Application.Transpose(outputArray)

Tipps für Profis

  • Nutze Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert werden. Das hilft, Fehler zu vermeiden.
  • Verwende Application.Match, um Duplikate beim Einlesen von Werten in ein Array zu vermeiden.
  • Berücksichtige die Verwendung von UBound und LBound, um die Grenzen Deines Arrays dynamisch zu verwalten.

FAQ: Häufige Fragen

1. Wie kann ich ein Array in einen Range in VBA schreiben? Du kannst ein Array in einen Range schreiben, indem Du die Value-Eigenschaft des Range-Objekts verwendest und das Array übergibst, idealerweise unter Verwendung von Application.Transpose.

2. Was ist der Unterschied zwischen Redim und Redim Preserve? Redim erstellt ein neues Array und verwirft alle vorherigen Werte, während Redim Preserve die bestehenden Werte beibehält und die Größe des Arrays ändert.

3. Wie kann ich Duplikate aus einem Array entfernen? Du kannst die Application.Match-Funktion verwenden, um zu überprüfen, ob ein Wert bereits im Array vorhanden ist, bevor Du ihn hinzufügst.

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