Excel VBA Daten schleife
#1
Hi,

ich stehe grade vor ein Problem ich würde gerbe in Excel folgendes lösen...

Zelle A1 steht das start Datum und in Zelle A2 das Enddatum - nun möchte ich per VBA in Spalte B alle Datumstage stehen haben außer Samstag und Sonntag.

Wie gehe ich am besten vor?

Gruß
Top
#2
Hallo,

Warum vba? Wenn das Startdatum in eine Zelle eingetragen wird, darum mit Formel das Datum darüber +1 umd nach unten ziehen, entstehen alls Datumswerte. Dann mit =Wochentag und filtern nach 6,7 die Wochenenden markieren und löschen.

Mfg
Top
#3
Danke für's schreiben - vba habe ich gedacht weil das ganze Automatisch passieren soll
Top
#4
Hallo!
Eine Möglichkeit:

Sub MachMal()
Dim Endzeile As Long
Endzeile = WorksheetFunction.NetworkDays(Cells(1, 1), Cells(2, 1))
With Columns("B")
   .ClearContents
   .NumberFormat = "ddd * dd/mm/yyyy"
End With
With Range("B1:B" & Endzeile)
   .Formula = "=WORKDAY(A$1,ROW(A1)-1)"
   .Value = .Value
End With
Columns("B").AutoFit
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
Hallo,

geht auch mit Formeln:

Formel in B2 nach unten ziehen:


Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
101.02.201601.02.2016
220.02.201602.02.2016
3 03.02.2016
4 04.02.2016
5 05.02.2016
6 08.02.2016
7 09.02.2016
8 10.02.2016
9 11.02.2016
10 12.02.2016
11 15.02.2016
12 16.02.2016
13 17.02.2016
14 18.02.2016
15 19.02.2016

ZelleFormel
B1=WENN($A$1="";"";A1)
B2=WENN(($A$1="")+(B1="");"";WENN(ARBEITSTAG(B1;1)>$A$2;"";ARBEITSTAG(B1;1)))
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#6
Hi!
Ich machs ja auch mit Formeln, Edgar!  ;-)
Mal die Variante, falls das Startdatum "aus Versehen" an einem Wochende ist:


Sub MachMal()
Dim Endzeile As Long, Korrektur As Byte
If WorksheetFunction.Weekday(Cells(1, 1), 2) > 5 Then Korrektur = 1
Endzeile = WorksheetFunction.NetworkDays(Cells(1, 1), Cells(2, 1))
With Columns("B")
  .ClearContents
  .NumberFormat = "ddd * dd/mm/yyyy"
End With
With Range("B1:B" & Endzeile)
  .Formula = "=WORKDAY(A$1,ROW(A1)-1+" & Korrektur & ")"
  .Value = .Value
End With
Columns("B").AutoFit
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Super die Formel ist echt klasse RPP63,

normal würde ich es auch mit Formel machen jedoch wurde ich gefragt nur ich bin kein VBA Held...
ist es auch möglich nach jeder Ausgabe vom Datum 4 Zeilen nach unten zu rutschen um das nächste Datum auszugeben? schaut besser aus


Gruß
Top
#8
Hi!
Zitat:schaut besser aus
Die einen sagen so, die anderen behaupten glatt, dass in eine Tabelle keinesfalls Leerzeilen gehören!
http://www.online-excel.de/excel/singsel.php?f=52

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#9
Hallo,

stelle doch einfach eine Zeilenhöhe von 30 ein, dann hast Du die Abstände!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#10
Oder:


Code:
Sub M_snb()
    Cells(1, 2).Resize([networkdays(A1,A2)]) = [index(workday(A1,row(offset(A1,,,networkdays(A1,A2)))-1),)]
End Sub
Top


Gehe zu:


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