Clever-Excel-Forum

Normale Version: Datenzuweisung über Array?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,

ich mache eine Wetterstatistik und muß da diverse Daten kopieren.

Code:
For i = loLetzte24 To loLetzte
     With Workbooks("Wetterdaten-Stunde.xlsb").Sheets(strJahr)
        ' "Wetterdaten-Stunde" Spalte B bekommt Wert aus "Wetterdaten" Spalte B
        .Range("B" & loNeueTarget).Value = Range("B" & i + 1).Value    ' Datum
        .Range("C" & loNeueTarget).Value = Range("F" & i + 1).Value    ' Außen-Temp
        .Range("D" & loNeueTarget).Value = Range("O" & i + 1).Value    ' letzte Stunde
        .Range("E" & loNeueTarget).Value = Range("P" & i + 1).Value    ' 24 Stunden
        .Range("F" & loNeueTarget).Value = Range("Q" & i + 1).Value    ' Woche
        .Range("G" & loNeueTarget).Value = Range("R" & i + 1).Value    ' Monat
        .Range("H" & loNeueTarget).Value = Range("S" & i + 1).Value    ' Total
     End With
     
     loNeueTarget = loNeueTarget + 1
     
     ' "Wetterdaten" Spalte X bekommt Wert aus "Wetterdaten" Spalte B
     Range("X" & i).Value = Range("B" & i).Value
     Range("Y" & i).Value = Range("F" & i).Value
     Range("Z" & i).Value = Range("O" & i).Value
     Range("AA" & i).Value = Range("P" & i).Value
     Range("AB" & i).Value = Range("Q" & i).Value
     Range("AC" & i).Value = Range("R" & i).Value
     Range("AD" & i).Value = Range("S" & i).Value
     
     With Sheets("Zusammenfassung")
        ' "Wetterdaten" Sheet "Zusammenfassung" Spalte B bekommt Wert aus "Wetterdaten" Spalte B
        .Range("A" & i).Value = Range("B" & i).Value
        .Range("B" & i).Value = Range("F" & i).Value
        .Range("C" & i).Value = Range("O" & i).Value
        .Range("D" & i).Value = Range("P" & i).Value
        .Range("E" & i).Value = Range("Q" & i).Value
        .Range("F" & i).Value = Range("R" & i).Value
        .Range("G" & i).Value = Range("S" & i).Value
     End With
  Next i

Kann ich das auch über ein Array machen, geht das dann schneller?
Hallo Ralf,

das ginge sicher schneller.
Du kannst aber auch ohne Arrays schon etwas Zeit sparen, wenn Du Bereiche nicht in einer Schleife überträgst sondern als Bereich.

Unten ein Beispielcode auf der Grundlage Deines Codes, nur mal die erste Zeile:


Code:
   i = loLetzte - loLetzte24
    With Workbooks("Wetterdaten-Stunde.xlsb").Sheets(strJahr)
       ' "Wetterdaten-Stunde" Spalte B bekommt Wert aus "Wetterdaten" Spalte B
       .Range("B" & loNeueTarget & ":B" & loNeueTarget + i).Value = Range("B" & loLetzte24 & ":B" & i + 1).Value  ' Datum
    End With


Kann sein, dass ich etwas übersehen habe, und es nicht ganz passt, aber das Prinzip solltest Du erkennen können.
Außerdem, falls Du es nicht in Deinem Code eingearbeitet hast, würde ich die Berechnung zu Beginn abschalten und am Ende wieder einschalten.
Das könnte auch noch einiges an Zeit sparen.
Hi Atilla,

(29.03.2015, 21:32)atilla schrieb: [ -> ]Unten ein Beispielcode auf der Grundlage Deines Codes, nur mal die erste Zeile:
[...]
Kann sein, dass ich etwas übersehen habe, und es nicht ganz passt, aber das Prinzip solltest Du erkennen können.
Außerdem, falls Du es nicht in Deinem Code eingearbeitet hast, würde ich die Berechnung zu Beginn abschalten und am Ende wieder einschalten.
Das könnte auch noch einiges an Zeit sparen.

danke, das ist eine gute Idee.
Das werde ich morgen mal testen, heute komme ich nicht mehr dazu.
Hi Atilla,

(29.03.2015, 21:32)atilla schrieb: [ -> ]Unten ein Beispielcode auf der Grundlage Deines Codes, nur mal die erste Zeile:

Jetzt wollte ich den Code testen, aber nun habe ich ein neues Problem.

Dieser Code

Code:
  strText = Space(LOF(lngFN))                          ' String erzeugen mit Länge des Datei-Inhaltes

der unter Office 2010 funktioniert, bringt eine Fehlermeldung:

Projekt oder Bibliothek nicht gefunden!

Und das Space ist markiert.

Es fehlt bei den Verweisen wohl das ATPVBAEN.XLAM
Wo bekomme ich das für 2013 her?
Oder kann ich die Benutzung das AddIn umgehen?
Hallo Ralf,

zum Testen könntest Du es mal so versuchen:


Code:
strText = VBA.Space(LOF(lngFN))    


Wird unter den Verweisen ein defekter Verveis angezeigt?
Wenn ja, dann lösch ihn.