Anzeige
Archiv - Navigation
1460to1464
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 - Kalenderwoche ausgeben

VBA - Kalenderwoche ausgeben
30.11.2015 09:16:09
Josef
Guten Morgen allerseits,
ich arbeite derzeit an einem Makro, welches aus Buchungssätzen die jeweilige Kalenderwoche herausliest. Soweit klappt es ganz gut aber nun habe ich eine Frage.
Also: in Spalte F stehen die Buchungstexte, in Spalte H soll die jeweilige KW ausgegeben werden. In Spalte A steht das Buchungsdatum.
Bisher sah meine Suchfunktion so aus:

Sub KW_füllen()
Dim Zelle As Range
Dim Textanfang As Long
Dim Letzte As Long
Letzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For Each Zelle In ActiveSheet.Range("F2:F" & Letzte)
If InStr(Zelle, "KW") > 0 Then
Textanfang = InStr(Zelle, "KW")
Zelle.Offset(0, 2).Value = Mid(Zelle, Textanfang, 4)
End If
Es wird also über InStr nach dem String gesucht und zwei Spalten weiter wird die KW dann ausgegeben. Es gibt auch noch weitere Bedingungen (z.B. wenn ein Leerzeichen zwischen "KW" und KW-Nummer ist). Klappt auch bisher alles.
Hier nun mein Anliegen: einige Buchungssätze enthalten keine KW. Bei ihnen wird die KW gewählt, in der sie gebucht wurden (Spalte A). Sie sind auch vom Buchungstext immer gleich, weswegen sie leicht gefunden werden können. Wie schaffe ich es also, dass VBA diesen Buchungssatz erkennt, sich auf Spalte A bezieht und die Kalenderwoche des dortigen Datums ausgibt?
Ich habe es mit FormulaLocal und KALENDERWOCHE versucht, hatte bisher aber keinen erfolg. Ich bin für alle Ideen offen.
Bis dahin beste Grüße

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Kalenderwoche ausgeben
30.11.2015 10:39:32
Rudi
Hallo,
  For Each Zelle In ActiveSheet.Range("F2:F" & Letzte)
If InStr(Zelle, "KW") > 0 Then
Textanfang = InStr(Zelle, "KW")
Zelle.Offset(0, 2).Value = Mid(Zelle, Textanfang, 4)
Else
Zelle.Offset(0, 2) = DINKW(Zelle.Offset(, 5))
End If
Next
End Sub
Function DINKW(datum)
' Kalenderwoche nach DIN
Dim tmp
tmp = DateSerial(Year(datum + (8 - Weekday(datum)) Mod 7 - 3), 1, 1)
DINKW = ((datum - tmp - 3 + (Weekday(tmp) + 1) Mod 7)) \ 7 + 1
End Function

AW: VBA - Kalenderwoche ausgeben
30.11.2015 11:19:48
Josef
Besten Dank Rudi. Klappt Einwandfrei.
LG
Josef
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige