hiroton
2025/02/18 (火) 17:51:38
1b258@f966d
コード(SQL構文、計算式等)をそのまま記述するとこの掲示板用のMarkdown記述と解釈されて意図しない整形がされてしまうことがあるので、コードブロックを使って記述しましょう
もっとも単純には、計算式で指定しているフィールドを重複を省いて引数において、そのまま戻り値に計算式を指定し、フィールド部分を引数に置き換えればユーザー定義関数化ができます
Function 締め日付(締め実日, 売上日付)
締め日付 = IIf(締め実日 Is Null, 売上日付, DateSerial(Year(売上日付), Month(売上日付) + IIf(Day(売上日付) > 締め実日, 1, 0), 締め実日))
End Function
Function 支払期日(支払月間, 支払日間, 締め日付, 支払実日)
支払期日 = IIf([支払月間] Is Null, DateAdd("d", [支払日間], [締め日付]), DateSerial(Year([締め日付]), Month([締め日付]) + [支払月間] + IIf([支払実日] = 0, 1, 0), [支払実日]))
End Function
※VBAで解釈できない計算式(SQL記述)の場合はこの方法ではうまくいかない場合があります
※VBA記述のマナーは無視しているので、ユーザー定義関数がうまく動作することが確認出来たらVBA記述として望ましい記述か?を別途見直してみるとよいです
クエリで使うときはそれぞれ
締め日付: 締め日付([締め実日],[売上日付])
支払期日: 支払期日([支払月間],[支払日間],[締め日付],[支払実日])
または、締め日付を求めずに支払期日を求める場合は、支払期日の締め日付指定部分に締め日付を求める関数を指定すればよいでしょう
支払期日: 支払期日([支払月間],[支払日間],締め日付([締め実日],[売上日付]),[支払実日])
通報 ...