Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

per VBA Ausgabe .txt erstellen
#1
Hallo,

ich habe folgendes Problem:

Ich betrachte in einer Simulation 8760 Stunden (1 Jahr) mit dazugehörigen Werten in Prozent für einen Speicherfüllstand:

t             f   

0            50
1            52
2            55
3            60
.             .
.             .
.             .
8760       20


Zusätzlich habe ich für jeden Prozentwert ein vertikales Temperaturprofil meines Speicherinhalts. Der Speicher ist 30 m hoch und ich habe die Temperaturen in cm aufgelöst:

f             0        1        2        3        4        ...        3000

0            Temperaturdaten . . . . . 
1
2
3
.
.
.
100


Ich benötige jetzt eine Ausgabedatei in txt Format, die die folgende Form hat:


t     z     T
0    0     .
0    1     .
0    2     .
0    3
.     .
.     .
.     .
1    0
1    1
1    2
1    3
.     .
.     .
.     .
2
2
2
2
.
.
.
8760
8760
8760
8760


Insgesamt werden das 26.280.000 Zeilen sein. Ich möchte das ganze also gerne per VBA realisieren. Das ganze würde man denke ich am schlausten per Schleife realisieren. Folgende Gedanken habe ich mir schon gemacht:


Sub Ergebnisausgabe()

Dim i As Integer
Dim j As Integer
     
     For i = 0 To 8760 Step 1
     
          For j = 0 To 3000 Step 1
            
                Cells(j, 1).Value = "i"
                Cells(j, 2):Value = "j"
                
          Next j

     Next i

End Sub



Ich ich denke, dass ich nach ähnlicher Form dann auch die Temperaturdaten aus der entsprechenden Tabelle rausholen und in Spalte 3 eintragen kann.

Nun fehlt mir aber noch der wichtige Schritt, das alles in eine Datei einzutragen. Es soll wie folgt funktionieren:

Für den Zeitschritt i = 0 soll die 3-zeilige Tabelle erstellt werden. Diese soll dann in eine txt gespeichert werden. Danach kommt Zeitschritt i=1 und die erzeugte Tabelle soll dann in meiner txt einfach ab der nächste Zeile angehängt werden usw, bis man dann die 8760 Schritte durch hat.

Wer kann mir bei solch einem Code helfen?

Vielen Dank!


Alessandro
Antworten Top
#2
Hallo Alessandro

Hier mal ein Code Beispiel abgekürzt
Code:
Option Explicit
Sub TxtDatei()
    Dim i As Integer, j As Integer, xt As String, xf As String, xTxT As String
    Dim Pfad As String, Dateiname As String
        Pfad = ThisWorkbook.Path & "\"
        Dateiname = "MeinText"
            For i = 2 To 5      '............ anstatt 5 = 8761
                For j = 2 To 5  '............ anstatt 5 = 3001
                    xt = Tabelle2.Cells(i, 1)   'Codename Tabelle anpassen
                    xf = Tabelle2.Cells(i, 2)   'Codename Tabelle anpassen
                    xTxT = Tabelle3.Cells(i, j) 'Codename Tabelle anpassen
                        Open Pfad & Dateiname & ".txt" For Append As #1
                        Print #1, xt & vbTab & xf & vbTab & xTxT
                        Close #1
                            DoEvents
            Next
                Next
End Sub
Aber für deine 26 Millionen Zeilen braucht es wohl einige Zeit zum schreiben
Ich würde sagen, wenn dein Rechner 1000 Zeilen pro Sekunde schreibt, brauchst du gut 7 Stunden

Mfg Guschti
Der Künstler lebt auch vom Applaus
Excel Optimaler Zuschnitt von Stangen/Balken - YouTube
Antworten Top
#3
Star 
Hallo Alessandro,

A) Inhalt
Wenn "z" für dich die Höhe in Zentimeter ist, liefert Guschtis code meines Erachtens die falschen Zahlen.

B) Geschwindigkeit
Wenn man
1. die Tabellen in Arrays einliest und
2. die Textdatei nicht nach jedem Eintrag schliesst und wieder öffnet
dann geht es auch ein wenig schneller.
Auf meinem alten Rechner dauert es ca 70 Sekunden.


Code:
Option Explicit
Sub Machs()
Dim intStunde As Integer
Dim intFuellstand As Integer
Dim intHoehe As Integer
Dim dblStart As Double
Dim varFuellstand As Variant
Dim varTemperatur As Variant

dblStart = Timer

varFuellstand = ThisWorkbook.Names("Fuellstand").RefersToRange.Value
varTemperatur = ThisWorkbook.Names("Temperatur").RefersToRange.Value
Open ThisWorkbook.Path & "\Speichertemperatur.txt" For Append As #1

For intStunde = 2 To UBound(varFuellstand, 1)
    intFuellstand = varFuellstand(intStunde, 2)
    For intHoehe = 2 To UBound(varTemperatur, 2)
        Print #1, varFuellstand(intStunde, 1) & ";" & varTemperatur(1, intHoehe) & ";" & varTemperatur(intFuellstand + 2, intHoehe)
    Next intHoehe
Next intStunde
Close #1
MsgBox Timer - dblStart

End Sub


ps
zum Testen in der angefügten Datei solltest du die Temperaturen füllen. Ich muste sie löschen, da die Datei ansonsten zu gross für ein upload in diesem Forum war.


Angehängte Dateien
.xlsm   SpeicherTemperatur.xlsm (Größe: 967,58 KB / Downloads: 1)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste