Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1252to1256
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

VBA einkürzen

VBA einkürzen
Tina
Hallo,
kann man folgendes noch besser einkürzen:
If Weekday(TB1.Cells(2, 1), 2) < 6 Then
TB2.Cells(3, 1) = Format(TB1.Cells(2, 1), "ddd dd.mm.yyyy")
End If
If Weekday(TB1.Cells(2, 1), 2) = 6 Then
TB2.Cells(3, 1) = Format(TB1.Cells(2, 1) + 2, "ddd dd.mm.yyyy")
End If
If Weekday(TB1.Cells(2, 1), 2) = 7 Then
TB2.Cells(3, 1) = Format(TB1.Cells(2, 1) + 1, "ddd dd.mm.yyyy")
End If
Grundsätzlich wird damit veranlasst:
wenn der Tag Mo bis Fr ist, dann trag ihn ein.
wenn der Tag Sa ist, dann zähl 2 Tage dazu
wenn der Tag So ist, dann zähl 1 Tag dazu
dadurch liste ich Tage auf, ohne das Wochenende.
Ich fürchte nur, dass es viel zu kompliziert ist.
Gruß
Tina

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA einkürzen
21.03.2012 14:14:16
marcl
Hallo Tina,
eine andere Möglichkeit wäre:
Dim tag As Integer
tag = Weekday(TB1.Cells(2, 1), 2)
Select Case tag
Case 6: TB2.Cells(3, 1) = Format(TB1.Cells(2, 1) + 2, "ddd dd.mm.yyyy")
Case 7: TB2.Cells(3, 1) = Format(TB1.Cells(2, 1) + 1, "ddd dd.mm.yyyy")
Case Else: TB2.Cells(3, 1) = Format(TB1.Cells(2, 1), "ddd dd.mm.yyyy")
End Select
Gruß
marcl
AW: VBA einkürzen
21.03.2012 14:36:02
Tina
hi marc,
jo ist schön kurz und klappt.
dankeschön
Einzeiler
21.03.2012 15:00:49
Erich
Hi Tina,
das geht auch noch kürzer:

Select Case Weekday(TB1.Cells(2, 1), 2)
Case 6:     TB2.Cells(3, 1) = Format(TB1.Cells(2, 1) + 2, "ddd dd.mm.yyyy")
Case 7:     TB2.Cells(3, 1) = Format(TB1.Cells(2, 1) + 1, "ddd dd.mm.yyyy")
Case Else:  TB2.Cells(3, 1) = Format(TB1.Cells(2, 1), "ddd dd.mm.yyyy")
End Select
'  oder als Einzeiler:
TB2.Cells(3, 2) = Format(TB1.Cells(2, 1) + Application.Max(0, _
2 - TB1.Cells(2, 1) Mod 7), "ddd dd.mm.yyyy")
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Einzeiler
21.03.2012 15:20:12
Tina
Hallo Erich,
stimmt auch der einzeiler klappt wunderbar.
aber wieso ist das Ergebnis nicht als Datum formatiert?
der nächste schritt ist dann, dass er immer einen Tag weiter darunter einträgt, macht er aber nicht, weil er kein Datum erkennt, wo er einen Tag dazuzählen soll.
Grübel grübel :o)
Wert und Format sind verschiedene Dinge
21.03.2012 15:40:28
Erich
Hi Tina,
was bedeutet "wieso ist das Ergebnis nicht als Datum formatiert"
Was wird ausgegeben? Ein Datum? Ein Text? (Probier mal die Formeln =ISTZAHL(A3) und =ISTTEXT(A3) )
Preisfrage: Was ist TB2? Eine Textbox? Oder ein Tabellenblatt?
(Das sind nur Vermutungen anhand des Namens...)
Wenn TB2 eine Textbox ist verstehe ich deine Frage nicht.
Wenn TB2 ein Tabellenblatt ist, kommt es darauf an, was genau du in TB2.Cells(3, 1) stehen haben willst:
- einen Text (String) der Art "So 05.06.2015"
- oder ein Datum
Wenn in der Zelle Text stehen soll, ist es nicht möglich, 1 dazu zu addieren.
Wenn in der Zelle ein Datum stehen soll, legst du das Format nicht mit dem Wert (aus VBA) fest,
sondern mit dem Zahlenformat der Zelle. Dann klappt auch das Addieren der 1.
Das Formatieren in VBA ist dann gerade kontraproduktiv. "Format" gibt eine Text durück!
Wenn in A2 in TB1 ein Datum steht, dann hiermit auch in TB2:

Select Case Weekday(TB1.Cells(2, 1), 2)
Case 6:     TB2.Cells(3, 1) = TB1.Cells(2, 1) + 2
Case 7:     TB2.Cells(3, 1) = TB1.Cells(2, 1) + 1
Case Else:  TB2.Cells(3, 1) = TB1.Cells(2, 1)
End Select
'  oder als Einzeiler:
TB2.Cells(3, 2) = TB1.Cells(2, 1) + Application.Max(0, 2 - TB1.Cells(2, 1) Mod 7)
Falls du die Zielzelle nicht dauerhaft in Excel mit dem gewünschten Datumsformat versehen hast,
kannst du das auch per VBA machen - erst einmal per Makroaufzeichnung.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Wert und Format sind verschiedene Dinge
21.03.2012 15:59:43
Tina
TB2 ist ein Tabellenblatt
ich habe eine wenig rumgespielt, es liegt an dem Eintrag "ddd dd.mm.yyyy" wenn ich "dd.mm.yyyy" lässt sich ein Tag dazuzählen, wenn ich den Formatbefehl nicht verwende, gibt er eine Zahl aus, die sich addieren lässt,
aber wie lasse ich dann das Datum Do 01.03.2012 anzeigen und nicht eine Zahl?
am Ende soll eine Spalte mit fortlaufenden Daten entstehen ohne Samstag und Sonntag.
Ich dachte ich nehme dann immer "plus 1 Tag" wenns kein Sa oder So ist....
aber ich denke da eher "einfach strukturiert" ha ha ha Anfänger halt ;o)
Format in Excel
21.03.2012 16:07:48
Erich
Hi Tina,
"wenn ich den Formatbefehl nicht verwende, gibt er eine Zahl aus, die sich addieren lässt"
Ja, genau das möchtest du!
Ein Datum ist eine Zahl - für heute (21.03.2012) steht die Zahl 40989 in der Zelle.
Schreib doch mal testhalber 41000 in eine Zelle und gibt ihr dann irgend ein Datumsformat.
"aber wie lasse ich dann das Datum Do 01.03.2012 anzeigen und nicht eine Zahl?"
Dadurch, dass du in Excel das Zahlenformat der Zelle(n) auf ein Datumsformat einstellst.
Das macht man in Excel, nicht in VBA. VBA liefert nur den Wert der Zelle, nicht das Format.
Zum Datum ion Excel lies vielleicht auch mal http://www.online-excel.de/excel/singsel.php?f=128
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
mein Laienhafter Vorschlag.... Gruß
21.03.2012 16:14:35
robert

Sub tage()
Dim i%, x%
Dim myday As Date
x = 2
myday = Range("A1") ' Erstes Datum-anpassen
Range("A2:A300").ClearContents
For i = 1 To 370
If Weekday(myday, 2)  Year(myday - 1) Then Exit Sub
Next i
End Sub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige