Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Formel in UDF abbilden

Betrifft: Formel in UDF abbilden von: Peter
Geschrieben am: 20.11.2014 18:27:00

Guten Abend

Aus http://www.excelformeln.de/formeln.html?welcher=7 habe ich eine Formel in meine Tabelle übernommen. Nun möchte ich diese in einer UDF abbilden.

Formel über Direktbereich abgefragt:
?activecell.FormulaR1C1
=MIN(YEAR(R1C1-1-MOD(R1C1-2,7)+4),YEAR(R1C1-MOD(R1C1-1,7)+4))

Den Inhalt von R1C1 übergebe ich dem Paramenter datDatum in der Function KW_Start als Date und ermittle dann das vorhergehende Montag-Datum, ausser der übergebene Wert ist schon ein Montag (in diesem Fall unveränderte Übernahme).
Nun will ich das Kalenderjahr ermitteln und habe obige Formel wie folgt umgesetzt:

KW_Start = Application.WorksheetFunction.Min(Year(datDatum - _
1 - Application.WorksheetFunction.MOD(datDatum - 2, 7) + 4), _
Year(datDatum - Application.WorksheetFunction.MOD(datDatum - 1, 7) + 4))

Das kann aber anscheinend so nicht berechnet werden. Was ist da falsch?

Gruss, Peter

https://www.herber.de/bbs/user/93919.xlsm

  

Betrifft: Mod ist keine WorksheetFunction... von: {Boris}
Geschrieben am: 20.11.2014 19:12:58

Hi peter,

...sondern in VBA ein eigener Operator.

10 Mod 5

lautet da die Syntax.

VG, Boris


  

Betrifft: AW: Mod ist keine WorksheetFunction... von: Peter
Geschrieben am: 20.11.2014 22:48:12

Hallo Boris, hall Luc
Danke für die Antworten.

Ich tue mich schwer mit der Umsetzung von MOD:

KW_Start = Application.WorksheetFunction.Min(Year(datDatum - 1 - (datDatum - 2 Mod 7) + 4), _
Year(datDatum - (datDatum - 1 Mod 7) + 4))

Ich habe verschiedene Klammersetzungen probiert und bin nie auf die Ergebnisse gekommen, die mir
=MIN(YEAR(R1C1-1-MOD(R1C1-2,7)+4),YEAR(R1C1-MOD(R1C1-1,7)+4))

liefert.

Wie kann ich diese VBA-Codezeile "entwickeln", dass die Logik wie bei der Formel umgesetzt ist?

Gruss, Peter


  

Betrifft: AW: Mod ist keine WorksheetFunction... von: Ewald
Geschrieben am: 21.11.2014 00:12:19

Hallo,

da vollkommen unklar ist wie das Endergebnis aussehen soll, kann es auch nur allgemeine Antworten geben.

Hier mal ein Makro das dir alle Infos aus einem Datum anzeigt (ab Excel 2010)

Sub Test()
Dim u
Dim x
Dim y
Dim z
Dim indat
indat = ActiveCell.Value
u = Month(indat)
x = Application.WorksheetFunction.WeekNum(indat, 21)
y = Format(Weekday(indat, 1), "DDDD")
z = Year(indat)
MsgBox "Jahr  " & z & Chr(13) & "Monat " & u & Chr(13) & "Woche  " & x & Chr(13) & "Tag  " & y
End Sub
Das in eine Funktion (inclusive Variabletypdeclaration) umzuwandeln dürfte das kleinste Problem sein.

Gruß Ewald


  

Betrifft: AW: Mod ist keine WorksheetFunction... von: Peter
Geschrieben am: 21.11.2014 11:05:43

Hallo Ewald

Dankeschön!

(es war nicht ganz vollkommen unklar, wie das Resultat aussehen sollte, ich habe im ursprünglichen Beitrag ein Link auf eine Beispielmappe aufgeführt).

Nun ist jedoch alles geklärt.

Gruss, Peter


  

Betrifft: Folgendes Konstrukt dürfte die richtige ... von: Luc:-?
Geschrieben am: 21.11.2014 00:41:06

…Umsetzung deiner Fml sein, Peter:
KW_Start = Application.WorksheetFunction.Min(Year(datDatum - 1 - (datDatum - 2) Mod 7 + 4), Year(datDatum - (datDatum - 1) Mod 7 + 4))
datDatum muss aber ein echtes Datum (also eine Zahl) sein!
Gruß, Luc :-?


  

Betrifft: AW: Folgendes Konstrukt dürfte die richtige ... von: Peter
Geschrieben am: 21.11.2014 11:02:35

Hallo Luc
Vielen Dank. Das hat mir weitergeholfen.

Gruss, Peter


  

Betrifft: Bitte sehr, gern geschehen! owT von: Luc:-?
Geschrieben am: 21.11.2014 19:46:33

:-?


  

Betrifft: WorksheetFunction.Mod gibt's nicht, ... von: Luc:-?
Geschrieben am: 20.11.2014 19:17:27

…Peter;
entweder die Fml in US-Notation als Text mit vbMethode Evaluate auswerten oder den VB-Operator Mod benutzen!
Gruß, Luc :-?


 

Beiträge aus den Excel-Beispielen zum Thema "Formel in UDF abbilden"