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.

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ß
Antworten 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
Antworten Top
#3
Danke für's schreiben - vba habe ich gedacht weil das ganze Automatisch passieren soll
Antworten 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)
Antworten 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.
Antworten 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)
Antworten 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ß
Antworten 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)
Antworten 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.
Antworten 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
Antworten Top


Gehe zu:


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