Oder-Funktion in Word 2000

Hallo,

ich möchte gern wissen ob es (zusätzlich zur „If“-Feldfunktion) auch eine „Oder“-Funktion gibt.

In Excel würde die Formel zb so aussehen (egal wie unsinnig die Formel jetzt sein mag *g*):
=WENN(ODER(A1;B5)=3;„Wahr“;„Falsch“)

„IF“ gibts ja in Word, aber „OR“ oder so? Was gäbe es für Möglichkeiten wenn es dieses „Oder“ nicht gibt?

LG

Hi

=WENN(A1=3;WAHR;WENN(B5=3;WAHR;FALSCH))

geschachtelte Wenn-Funktionen, zweites Wenn im Sonst des ersten.

M.

Hallo Markus,

mir gings speziell um folgendes: ich möchte den Monatsletzten eines Monats herausbekommen. Word ist ja da etwas minderbemittelt was Datumsrechnungen angeht. Nun wollte ich ja nicht anfangen:

Wenn Monat = 1 Dann 31, wenn Monat = 2 Dann 28 …

Sondern eher „wenn Und(Monat = 1, 3, 5, 7,8,10,12) Dann 31, wenn Und(Monat = 4,6,9,11) Dann 30,28)“ oder so ähnlich (habs jetzt nicht „richtig“ notiert, ich hoffe du / ihr versteht trotzdem was ich möchte *g*)

LG Tobi@s

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Sondern eher „wenn Und(Monat = 1, 3, 5, 7,8,10,12) Dann 31,
wenn Und(Monat = 4,6,9,11) Dann 30,28)“ oder so ähnlich (habs
jetzt nicht „richtig“ notiert, ich hoffe du / ihr versteht
trotzdem was ich möchte *g*)

hallo Tobi@s,

Extras—Makro—Aufzeichnen
Im erscheinenden Fenster wählst du aus wo das makro abgespreichert werden soll, im aktuellen Dokument oder in Normal.dot (Voreinstellung).
Du vergibst einen beliebigen Namen und weist eine Tastenkombination zu.

Dann schreibst du 2-3 beliebige Zeichen ins Dokument und beendest die Aufzeichnung des Makros.
Nun Alt+F8 und „Bearbeiten“ beim entsprechenden Makronamen auswählen.

Du erkennst ja das Makro am Namen, schmeiß alles raus was zwischen
Sub …()
und
End Sub

steht und ersetze es durch:

Selection.TypeText Text:=M()
Und kopiere noch die nachstehende Funktion dazu.
Aussehen muß das ganze wie nachstehend gezeigt.

Function M() As Integer
Dim N As Integer
N = Month(Date)
Select Case M
 Case 1, 3, 5, 7, 8, 10, 12
 M = 31
 Case Else
 M = DateSerial(Year(Date), N + 1, 1) - DateSerial(Year(Date), N, 1)
End Select
End Function
'
Sub test()
Selection.TypeText Text:=M()
End Sub

Gruß
Reinhard

Hallo Reinhard,

danke für deine Mühe - aber das ist es nicht was ich suche.
Hier auf Arbeit ist VBA gesperrt und ich kann somit nicht drauf zugreifen. Wenns das ginge hätte ichd as Problem schon lange mit einer wunderschönen UserForm gelöst :smile:

Deshalb bleibt es bei Word-Funktionen :frowning:

LG Tobi@s

Hallo Reinhard,

so, jetzt noch mal privat :smile:
deine Ausführungen - danke. Aber wenn du dich noch entsinnst habe ich die Excel-Funktion mit dieser „Platzierung“ geschrieben - weiß also schon wie man sowas macht im Grund :smile:

Auch deine Funktion könnte man ein wenig kürzer schreiben: da mit dem „Case Else“ Abschnitt eh alle „Letzten Monatstage“ angezeigt werden braucht man diese Case-Geschichte gar nicht und kann alles in eine Zeile schreiben:

M = DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1)

Somit hat man in der Funktion nur eine einzige Zeile - und da kann man sich die Funktion sogar ganz sparen und gleich in das Programm übernehmen :smile:

Selection.TypeText Text:=DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1)

Aber leider kann ich das auf Arbeit nicht verwenden :frowning:

LG Tobi@s

Auch deine Funktion könnte man ein wenig kürzer schreiben: da
mit dem „Case Else“ Abschnitt eh alle „Letzten Monatstage“
angezeigt werden braucht man diese Case-Geschichte gar nicht
und kann alles in eine Zeile schreiben:

M = DateSerial(Year(Date), Month(Date) + 1, 1) -
DateSerial(Year(Date), Month(Date), 1)

Hallo Tobi@s,

mir hat dieser Teil im Dezember nicht gefallen:
Month(Date) + 1

Ich ging davon aus DateSerial liefert einen Fehler wenn man den Monat mit 13 angibt.

Dafür daß da kein Fehler kommt kann ich nix :smile:)

Gruß
Reinhard

danke für deine Mühe - aber das ist es nicht was ich suche.
Hier auf Arbeit ist VBA gesperrt und ich kann somit nicht
drauf zugreifen. Wenns das ginge hätte ichd as Problem schon
lange mit einer wunderschönen UserForm gelöst :smile:
Deshalb bleibt es bei Word-Funktionen :frowning:

Hallo Tobi@s,

schau mal zu Rene Probst:

http://web.archive.org/web/20071017092207/http://myp…

Gruß
Reinhard

Hallo Reinhard,

dort habe ich schon (vorher) geschaut. Nix drin was mir weiterhilft.
Werde wohl bei meiner langen If-Then-Schlange bleiben müssen *g*.
Ich hab noch ne Idee, aber ob ich die umsetzen kann weiß ich noch nicht.

LG

Hallo Tobias,

dort habe ich schon (vorher) geschaut. Nix drin was mir
weiterhilft.

schade, grad bei der einen langen Feldfunktion dachte ich da wär was dabei, grad das mit daysinmonth.

Werde wohl bei meiner langen If-Then-Schlange bleiben müssen
*g*.

Manchmal muß es akzeptieren wie#s kommt, Hauptsache ist sie funktioniert und ist praktikabel.

Ich hab noch ne Idee, aber ob ich die umsetzen kann weiß ich
noch nicht.

Welche?

Ich bin nicht fit in Word. ch hab mir mal alle Feldfunktionen oberflächlich angeschaut.
Wobei mir auffiel daß z.B. „And“ nicht in der Hilfe erwähnt wird, man es aber mit
=AND
durchaus in Feldfunktionen benutzen kann.

Mir fiel „Index“ auf und noch eine andere Funktion mit deren Hilfe man aus einer externen Datei etwas herasulesen kann.

Da könnte diese Fremddatei eine Text-Datei sein oder eine xls-datei.
Dort stehen dann die Monatslängen untereinander drin.

Grundsätzlich könnte dann das Ganze so aussehen:

{ INDEX { „C:\temp\Monate.xls“ ; {Date @ „MM“ }}

Natürlich ist die Syntax völlig falsch, ist halt nur eine Idee.

Gruß
Reinhard

Hallo Reinhard,
schade, grad bei der einen langen Feldfunktion dachte ich da
wär was dabei, grad das mit daysinmonth.
Dieses „daysinmonth“ habe ich leider nirgendwo in Word einsetzen können.

Hier jedoch meine Lösung:

{IF DTag 0 {DTag} {IF{=OR({=OR(DMonat=4;DMonat=6)};{=OR(DMonat=9;DMonat=11)})} = 1 „30“ {IF{=AND(DMonat=2;{OR({=Mod(DJahr;4)}=0;{Mod(DJahr;400)}=0)})} = 1 „29“ {IF{=AND(DMonat=2;{OR({=Mod(DJahr;4)}0;{Mod(DJahr;400)}0)})} = 1 „28“ „31“}}}}

„DTag“, „DMonat“ und „DJahr“ sind die entsprechend vorher ausgerechneten Ergebnisse für den (Neuen) Tag, Monat und Jahr (Erläuterungen siehe unten). Diese drei sind entsprechend auch Textmarken in Textformularfeldern.

Er überprüft erst ob der „Tag“ = 0 Ist. Dies ist der Fall wenn der Ausgangstag der „1.“ eines Monats ist und das Ende des Zeitraums (s. unten) einen Tag „vorher“ ist. Ist also das Ende ein „2. - 30.“ dann nimmt er den Tag so wie er da ist.
Danach prüft er ob der „Monat“ April, Juni, September oder November ist und nimmt den Wert 30. Danach prüft er ob „Monat“ Februar ist und ob die Bedingungen für ein Schaltjahr vorliegen. Ist dies der Fall nimmt er in diesem einen Fall 29 Tage.
Danach prüft er ob der „Monat“ Februar ist und KEIN Schaltjahr vorliegt, dann nimmt er 28 Tage und ansonsten 31 Tage.

Blöd ist, dass die AND- und OR-Funktion jeweils nur 2 Werte immer annehmen. So musste ich die 4 Werte (bei der „30“) in zwei verschachtelte OR-Funktionen einbetten.

Hier jedoch noch einmal konkret was ausgerechnet wurde:
Es soll, von einem einzugebenden Anfangsdatum (Textmarke: „Dvon“) und dem einzugebenen Enddatum (Textmarke: „Dbis“) eine 3-Monats-Frist ausgerechnet werden. Ist das Datum „Dbis“ kleiner als die 3 Monate dann soll mit dem Datum „Dbis“ weitergerechnet werden. Ist „DBis“ grö-ßer dann nur mit den max. 3 Monaten.

Meine Überlegung war:
Der „DTag“ ist immer der „Dvon“-Tag „minus“ 1.
{={Dvon @ „dd“}-1}
Textmarke: DTag

In einer weiteren Berechnung prüfe ich ob „DTag“ Null ist. Ist dies der Fall soll er mir dort eine 1 eintragen ansonsten eine 0.
{If{={Dvon @ „dd“}-1} = 0 1 0}
Textmarke: DTagRest

Der neue Monat wird berechnet durch
{IF{={Dvon @ „MM“ }+3-DTagRest} > 12 {={Dvon @ „MM“}-9-DTagRest} {={Dvon @ „MM“}+3-DTagRest} # 00}
Textmarke: DMonat

Nun notiere ich noch ob die Monatsanzahl über den Jahreswechsel geht
{={Dvon @ „MM“}+3-DTagRest}
Textmarke: DMonatRest

Das Jahr errechnet sich nun wie folgt:
{If DMonatRest > 12 {={Dvon @ „yyyy“}+1 {={Dvon @ „yyyy“}}}
Textmarke: DJahr

Das so errechnete Datum der 3-Monats-Frist wurde zusammengeschrieben und unter der Textmarke „MaxDatum“ erfasst

Das „Dvon“-Datum, das „Dbis“-Datum und das „MaxDatum“ wurden in einer Tabelle aufgeschlüs-selt (Tabelle wird versteckt dargestellt später)
mit
{Dvon @ „dd“}
{Dvon @ „MM“}
{Dvon @ „yyyy“}
in den Zellen B2, C2 und D2 bzw. B3, C3 und D3 bzw. B7, C7 und D7 (in den Zeilen 4 – 6 ist die oben beschriebene Datumsberechnung).
„Dbis“ muss natürlich angepasst werden.

Nun hat Word ein Problem. Wenn ich die Formel eingebe {={Dvon}} schreibt er mir eine 5 oder 6-stellige Zahl hin, die man nicht mehr gut zurückverfolgen kann: aus 03.06.2008 wird 62011 (Die 6 steht für den Monat, die 2011 ist das Ergebnis aus „2008“ + „3“). Die 62011 könnte aber auch der 02.06.2009 sein … :frowning:
Deshalb nutze ich zur Differenz-berechnung folgende Formel:

(Jahr – 1) * 365 + (Monat – 1) * 31 + Tag. So kommt man auf eine eindeutige Zahl.

Die Zahl für das Datum „Dvon“ berechnet sich also mit
{=(D2-1)*365+(C2-1)*31+B2}

Die Formeln für die Zahlen für „Dbis“ und „MaxDatum“ werden dem entsprechend angepasst mit Zeile 3 und Zeile 7. Die Textmarken dazu lauten „TatsEnde“ und „MaxEnde“.

Nun prüfe ich in einem letzten Schritt welches Datum genommen werden muss:
{If TatsEnde

Hallo Tobi@s,

Ich hoffe es war nicht zu kompliziert dargestellt.

sicher nicht, sieht sehr okay aus. Mein Problem ist, ich kann mit der Word-Feldfunktion nicht so umgehen.
Bin auch kläglich gescheitert quasi zum Einstieg irgendwas mit If (date @ „MM“)=6 „gut“ „schlecht“)
zu basteln. Natürlich habe ich alle variationen der 6 durchgespielt, „06“ usw.

Da ich aber in der langen Zeit hier im Word-Brett nie allzuviel mitlesen konnte daß es da um Genaueres zu Feld-Funktionen-programmierung geht würde ich dir ein anderes Forum vorschlagen.

Vielleicht hier:

http://www.ms-office-forum.net/forum/forumdisplay.ph…

Datei hochladen geht leider von hier aus nicht :frowning:

Geht da gar nix? mal mit den Admins reden, sofern das geht, hab schon gehört daß da manche sehr hochnäsig sind oder halt unsicher und erstmal alles sperren. Letzteres zeugt aber nicht grad von Souverenitaet.

Zur Not schickst du ihnen die Datei die hochgeladen werden soll, dann sollen sie die hochladen. Ist doch im Interesse der Firma daß da geholfen wird.

Sorry, ich hab nicht das Gefühl daß ich dir da in der Sache helfen könnte :frowning:

Gruß
Reinhard

Hallo Reinhard,

du hast zwar nicht „tatsächlich“ geholfen aber das reden darüber hat mir geholfen mich noch mehr damit zu beschäftigen und - ich habs ja dann doch hinbekommen.

Datei hochladen … bin im öffentlichen Dienst und die haben sich recht eng was Dateien und Software angeht. Weiß noch nicht mal so richtig ob es überhaupt Ärger geben kann dass ich „Dienstlich“ hier schreibe und frage … :-/ Deshalb will ich mich nicht zu weit aus dem Fenster lehnen, meine häuptsächliche Arbeit besteht ja (leider) nicht darin Vordrucke zu entwerfen (obwohl ichs recht gut bringe).

LG Tobi@s