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

In einem Range Bereich jede 3 Zelle befüllen

Forumthread: In einem Range Bereich jede 3 Zelle befüllen

In einem Range Bereich jede 3 Zelle befüllen
05.05.2024 10:08:33
Heimwerker
Hallo zusammen.

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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In einem Range Bereich jede 3 Zelle befüllen
05.05.2024 13:57:08
{Boris}
Hi,

wenn sich Deine Datenbasis verändern kann, bietet es sich immer an, die Spalten(nummern) dynamisch (anhand des Headers) zu ermitteln - z.B. mit der Find- oder auch der Match-Methode.
Und statt Range nutzt Du dann konsequent Cells, da man dort ausschließlich mit Zahlen (Zeilen- und Spaltennummer) arbeitet.

VG, Boris
Anzeige
AW: In einem Range Bereich jede 3 Zelle befüllen
06.05.2024 19:00:48
daniel
Hi

du kannst hier nicht die Bereichsnamen wie Spaltenbuchstaben verwenden (Zeilennummer anhängen)
wenn, dann Range("StromT1").Cells(lngZeile, 1)

im Makro fehlt aber auch die Zuweisung des Startwerts von lngZeile.
so ist der wert von lngZeile beim ersten Umlauf 0, und die ist als Zeilen- oder Spaltennummer nicht zulässig.

Gruß Daniel

Anzeige
AW: In einem Range Bereich jede 3 Zelle befüllen
06.05.2024 20:04:54
Heimwerker
Hallo Daniel.

Vielen Dank für den Code und die Erklärung dazu.
jetzt geht das Makro und ich bin einen Riesen Schritt weiter gekommen.

Grüße

Heimwerker
AW: In einem Range Bereich jede 3 Zelle befüllen
06.05.2024 18:15:42
Heimwerker
Hallo Boris

Danke für deine Antwort, leider bringt mich das jetzt im Moment nicht wirklich weiter.

Grüße

Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige