In einem Range Bereich jede 3 Zelle befüllen
05.05.2024 10:08:33
Heimwerker
Ich bin noch Anfänger im Excel VBA und hänge gerade an einem kleinen Problem fest und hoffe es kann mir jemand helfen?
Ich werte über ein Makro eine Textdatei aus und lasse diese dann in zwei Spalten aufteilen. Datum und Wert.
Das Makro was ich mit einem Kumpel mal gebastelt habe funktioniert soweit echt klasse.
Aber auf die Jahre wurden die zu auswertenden Text Dateien immer mehr und die Excel Datei wird immer unübersichtlicher bzw. es wird immer Schwerer noch was hinzuzufügen.
Jetzt ist der Gedanke entstanden das man anstelle der Klassischen Spalten Auswahl A, B, C, usw. den Bereich A, B, C eine Namen Vergibt und mit dem Bereichsnamen dann arbeitet.
Dies hätte dann den Vorteil das ich Spalten dazwischen setzten kann ohne in den vielen Makros den Buchstaben zu ändern.
Der alte funktionierende Code sieht so aus:
Sub ZeileAuswerten(ByVal strEingabe As String)
Dim lngZeichen As Long
Dim strDatum As String
Dim strWert As String
Dim dblWertAlt As String
Dim iSpalte As Integer
iSpalte = 2
lngZeile = 3
dblWertAlt = -1
With Worksheets("Auswerten")
.Activate
.Range("A:B").Clear
.Range("A1") = "Stromverbrauch Taeglich"
.Range("A2") = "DatumZeit"
.Range("B2") = "Verbrauch Stromzähler"
Do
Debug.Print strEingabe & " - " & Len(strEingabe)
lngZeichen = InStr(strEingabe, ",")
strWert = Left(strEingabe, lngZeichen - 1)
If iSpalte = 1 Then
strDatum = strWert
iSpalte = 2
Else
If dblWertAlt > strWert Then
.Range("A" & lngZeile) = strDatum
.Range("B" & lngZeile) = strWert
lngZeile = lngZeile + 3 'wie viele Spalten Abstand sind, hier sind es zwei
End If
iSpalte = 1
End If
strEingabe = Mid(strEingabe, lngZeichen + 1)
Loop While InStr(strEingabe, ",")
strWert = strEingabe
If dblWertAlt > strWert Then
.Range("A" & lngZeile) = strDatum
.Range("B" & lngZeile) = strWert
End If
End With
End Sub
Das wäre dann die neue Version:
Sub ZeileAuswerten(ByVal strEingabe As String)
Dim lngZeichen As Long
Dim strDatum As String
Dim strWert As String
Dim dblWertAlt As String
Dim iSpalte As Integer
Dim lngZeile As Long
Dim Offset As String
iSpalte = 2
lngZeile = 3
dblWertAlt = -1
With Worksheets("Auswerten")
.Activate
.Range("StromT1").Clear
.Range("StromT2").Clear
.Range("StromT1").Rows(1) = "Stromverbrauch Taeglich"
.Range("StromT1").Rows(2) = "DatumZeit"
.Range("StromT2").Rows(2) = "Verbrauch Stromzähler"
Do
Debug.Print strEingabe & " - " & Len(strEingabe)
lngZeichen = InStr(strEingabe, ",")
strWert = Left(strEingabe, lngZeichen - 1)
If iSpalte = 1 Then
strDatum = strWert
iSpalte = 2
Else
If dblWertAlt > strWert Then
.Range("StromT1" & lngZeile) = strDatum
.Range("StromT2" & lngZeile) = strWert
lngZeile = lngZeile + 3 'wie viele Spalten Abstand sind, hier sind es zwei
End If
iSpalte = 1
End If
strEingabe = Mid(strEingabe, lngZeichen + 1)
Loop While InStr(strEingabe, ",")
strWert = strEingabe
If dblWertAlt > strWert Then
.Range("StromT1" & lngZeile) = strDatum
.Range("StromT2" & lngZeile) = strWert
End If
End With
End Sub
Das Makro bleibt stehen ab
If dblWertAlt > strWert Then
.Range("StromT1" & lngZeile) = strDatum
.Range("StromT2" & lngZeile) = strWert
lngZeile = lngZeile + 3 'wie viele Spalten Abstand sind, hier sind es zwei
End If
So wie ich das verstehe kann er mit dem lngZeile nix anfangen um erst die dritte Zelle zu beschreiben.
Wie muss ich das ändern das er im Bereich Range StromT1 jeder 3 Zelle mit dem Wert strDatum und in Range StromT2 den Wert strWert schreibt.
Ich hoffe ich hab das Problem verständlich beschrieben und würde mich über Eure Hilfe freuen.
Grüße
Handwerker
Anzeige