Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA: Schreiben in Zellen

0 views
Skip to first unread message

Markus Eckel

unread,
Jan 5, 2003, 4:10:25 AM1/5/03
to
Hallo Leute,
ich bekomme es ja nun hin mit
with worksheets("1")
Set Werte = .Range(.Cells(1, 1), .Cells(500, 1))
End with
Werte aus einem Zellenbereich auszulesen und einer Variablen zuzuweisen
(sozusagen "in einem Schlag", nicht mit for I=1 to 500 - das dauert immer so
lange...).
Jetzt möchte ich auch gernen den umgekehrten Fall hinbekommen - das
ZURÜCKSCHREIBEN DES FELDES IN ZELLEN.
Ich hab's versucht mit:
with worksheets("1")
Set Temp= .Range(.Cells(1, 2), .Cells(500, 2))
Temp = Werte()
End with
Aber da klappt nicht - WIE KRIEG ICH DAS HIN???

Danke für Hinweise!

Markus

Hajo

unread,
Jan 5, 2003, 5:00:36 AM1/5/03
to
Hallo Markus

eindimensinales Array in zelle schreiben
Worksheets("xy").Range("A1:A2000").Value =
WorksheetFunction.Transpose(Array)

von GerdZ Herber.de

Gruß Hajo

"Markus Eckel" <Markus...@Nexgo.de> schrieb im Newsbeitrag
news:3e17f651$0$5877$9b4e...@newsread2.arcor-online.net...

Hans Hofmann

unread,
Jan 5, 2003, 6:01:50 AM1/5/03
to
On Sun, 5 Jan 2003 10:10:25 +0100, "Markus Eckel"
<Markus...@Nexgo.de> wrote:

Hallo Leute,

>ich bekomme es ja nun hin mit

Du unterliegst einem gewaltigen Irrtum :-(

> with worksheets("1")
> Set Werte = .Range(.Cells(1, 1), .Cells(500, 1))
> End with
>Werte aus einem Zellenbereich auszulesen und einer Variablen zuzuweisen
>(sozusagen "in einem Schlag", nicht mit for I=1 to 500 - das dauert immer so
>lange...).
>Jetzt möchte ich auch gernen den umgekehrten Fall hinbekommen - das
>ZURÜCKSCHREIBEN DES FELDES IN ZELLEN.

Werte ist mit nichten ein Array (ein Feld)! Nie, noch nie gewesen ;-)
Es verhält sich nur so. Korrekt:

Dim werte As Range, Temp As Range
Set werte = Range(Cells(1, 1), Cells(20, 1))

Werte ist ein Range-Objekt, d.h., etwas vereinfacht, ein Pointer, ein
Verweis, auf einen Tabellenbereich. Eine Zuweisung dieses Pointers an
Temp, Korrekt:
Set Temp = Werte
Richtet einen zweiten Verweis auf exakt den gleichen Tabellenbereich
werte ein. Da wird nix eingelesen...

>Ich hab's versucht mit:
> with worksheets("1")
> Set Temp= .Range(.Cells(1, 2), .Cells(500, 2))
> Temp = Werte()
> End with
>Aber da klappt nicht - WIE KRIEG ICH DAS HIN???

Set Temp = Range(Cells(1, 2), Cells(20, 2))

Temp ist nun seinerseits ein Verweis auf den Zielbereich. Und eine
Wertezuweisung (Value) erfolgt durch:

Temp.Value = werte.Value

Wobei die Value Eigenschaft nur zur Verdeutlichung angegeben ist für
die durchgeführte Aktion: Weise die Werte von werte (Range) den Werten
von Temp (Range) zu. Value kann entfallen, weil Default-Eigenschaft.

Nur so zur Klarstellung, vielleicht auch weil Hajo mit seiner Antwort
ein Probelm löst, dafür aber tausend neue schafft - @Hajo, bitte nicht
böse sein deswegen.

>Danke für Hinweise!

Bitte,
VBA ist aweng objektorientiert, da ist auch eine entsprechende Denke
notwendig... ;-).

Gruß HW

Markus Eckel

unread,
Jan 5, 2003, 6:55:55 AM1/5/03
to
Danke für den Hinweis!

Also,
Dim werte As Range
Set werte = Range(Cells(1, 1), Cells(20, 1)) 'Verweis erstellen
Redim Temp(werte.count)
for I=1 to werte.count
Temp(I)=Werte(I).Value 'Dem Feld "Temp" die Werte aus dem Verweis
zuordnen?!
Next I
' hier wäre jetzt Temp ein Feld, das ich weiterbearbeiten/verändern
könnte ?!
ABER WIE KRIEG ICH JETZT MEIN FELD "Temp" WIEDER IN ANDERE ZELLEN REIN? Etwa
mit
Dim werteNeu As Range
Set werteNeu = Range(Cells(1, 2), Cells(20, 2)) 'Verweis erstellen
werteNeu = Temp
Wäre das so richtig???

Danke für die Antwort

Markus

"Hans Hofmann" <ha...@chefmail.de> schrieb im Newsbeitrag
news:pv2g1vs6albasoc1n...@4ax.com...

Hans Hofmann

unread,
Jan 5, 2003, 8:51:34 AM1/5/03
to
On Sun, 5 Jan 2003 12:55:55 +0100, "Markus Eckel"
<Markus...@Nexgo.de> wrote:

>Danke für den Hinweis!
>
>Also,

Besser zum mitlesen:

Dim Temp() as Variant
Dim rngWerte As Range
'Verweis erstellen
Set rngWerte = Range(Cells(1, 1), Cells(20, 1))

Redim Temp(rngWerte.count)
Ist zwar "richtig" wird aber durch die Zuweisung von Array = Range
wieder überschrieben...

VBA "verträgt" ein casting (konvertieren von Datentypen) von Range
nach Array (bequem, aber gefährlich weil Temp(z) dadurch unbemerkt zum
Temp(z,1) mutiert ;-) etwa

Temp = rngWerte

Allerdings muss dann ggf. der Array Temp entsprechend dem verwendeten
Range als Temp(z,1) angesprochen werden, s.o.. So weit so gut.

Wozu hast Du denn den Range in einen Array eingelesen. Was soll etzat
passiern...
Nur zum Umkopieren ist der Schritt unnötig...

> ' hier wäre jetzt Temp ein Feld, das ich weiterbearbeiten/verändern
>könnte ?!
>ABER WIE KRIEG ICH JETZT MEIN FELD "Temp" WIEDER IN ANDERE ZELLEN REIN? Etwa

Warum schreist Du so...?

>mit
> Dim werteNeu As Range

Eidieweil der Pointer 'rngWerte' nixmehr gebraucht wird, könnte man
den hier weiter verwenden.

> Set werteNeu = Range(Cells(1, 2), Cells(20, 2)) 'Verweis erstellen
> werteNeu = Temp
>Wäre das so richtig???

Sagen wir mal das das so funktioniert, wenn, ja
_wenn der Array Temp richtig geDim't wurde_,
was aber beim Casten, s.o., automatisch passiert.

Dein Array Temp müsste transponiert (siehe bei Hajo) werden, damit er
richtig in werteNeu eingelesen wird, etwa:

werteNeu = WorksheetFunction.Transpose(Temp)

Ob's richtig ist - naja das kommt daraum an, was man erreichen will?
Schneller ist es den Range direkt nach Array zu übernehmen, dann ggf.
mit Temp(z,s) zu arbeiten und dann den Array wieder direkt auf den
Range zu casten.


Gruß HW

Ach bitte, stelle TOFU ab. Und lösche Textpassagen zu denen nix zu
sagen ist...

0 new messages