Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1808to1812
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Elegenate Lösung als Schleife

Elegenate Lösung als Schleife
03.02.2021 12:35:38
Sahin
Hallo Ihr lieben,
ich bin kein ausgebildeter Programmierer und programmiere im VBA einfach durchs probieren. Am Ende klappt es immer irgentwie. Nun komme ich nicht weiter:
Folgendes möchte ich elegante als eine schleife haben. Es sollen insgesamt die Variable Stundentag1 bis Stundentag365 zusammenaddiert werden. Ich möchte aber keine 365 Zeilen mit Stundentag haben und dann bei Summetag = Stundentag1 + Stundentag2 bis Stundentag 365.

Sub Stundenzahler()
Dim Stundentag1 As Double
Stundentag1 = Application.WorksheetFunction.CountIf(Range("Tagday" & 1), "=M1") / 2
Stundentag2 = Application.WorksheetFunction.CountIf(Range("Tagday" & 2), "=M1") / 2
Stundentag3 = Application.WorksheetFunction.CountIf(Range("Tagday" & 3), "=M1") / 2
Stundentag4 = Application.WorksheetFunction.CountIf(Range("Tagday" & 4), "=M1") / 2
summetag = Stundentag1 + Stundentag2 + Stundentag3 + Stundentag4
MsgBox summetag
End Sub


Wenn ich das per Hand eingebe, wird alle richtig zusammengerechnet. Ich möchte aber nicht die Liste bis 365 fortführen
Das geht garantiert eleganter.
Folgender Ansatz von mir ist leider gescheitert:

Sub Stundenzahler2()
Dim Stundentag(1 To 3) As Double
For i = 1 To 365
Stundentag(i) = Application.WorksheetFunction.CountIf(Range("Tagday" & i), "=M1") / 2
summetag = Application.WorksheetFunction.CountIf(Stundentag(1 to 365))
Next i
MsgBox summetag
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Elegenate Lösung als Schleife
03.02.2021 12:41:35
Sahin
Dim Stundentag(1 To 365) As Double
For i = 1 To 365
Stundentag(i) = Application.WorksheetFunction.CountIf(Range("Tagday" & i), "=M1") / 2
summetag = Application.WorksheetFunction.Sum(Stundentag(1 to 365))
Next i
MsgBox summetag
End Sub
Sollte es sein sorry
AW: Elegenate Lösung als Schleife
03.02.2021 12:46:15
Daniel
Hi
wenn dann so:
Dim Stundentag(1 To 365) As Double
For i = 1 To 365
Stundentag(i) = Application.WorksheetFunction.CountIf(Range("Tagday" & i), "=M1") / 2
Next i
summetag = Worksheetfunction.Sum(Stundentag)
die Dimensionierung muss natürlichlich entsprechend der benötigten Anzahl erfolgen.
ein Array kannst du problemlos mit Worksheetfunction.Sum aufaddieren.
wenn du Stundentag nicht noch an anderer Stelle benötigst sondern nur die Summe, würde das auch so gehen:

summetag = 0
For i = 1 To 365
summetag = summetag + Application.WorksheetFunction.CountIf(Range("Tagday" & i), "=M1") / 2
Next i
Gruß Daniel
Anzeige
AW: Elegenate Lösung als Schleife
03.02.2021 12:49:16
worti
Halo Sahin,
mit Array:
Sub t()
Dim Stundentag(1 To 365) As Double
Dim MeineSumme As Double
Dim intI As Integer
For intI = 1 To 365
Stundentag(intI) = _
Application.WorksheetFunction.CountIf(Range("Tagday" & intI), "=M1") / 2
Next
MeineSumme = 0
For intI = 1 To 365
MeineSumme = MeineSumme + Stundentag(intI)
Next
End Sub
Gruß Worti
AW: Elegenate Lösung als Schleife
03.02.2021 12:58:25
Sahin
Vielen Dank Ihr beiden.
Sowohl die Lösung von Daniel als auch von Worti funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige