Microsoft Access 掲示板

締日・支払期日をユーザー定義関数で作りたい / 4

11 コメント
views
4 フォロー
4
hiroton 2025/02/19 (水) 10:09:39 116a6@f966d

※VBAで解釈できない計算式(SQL記述)の場合はこの方法ではうまくいかない場合があります
ろくに計算式を見ないで回答してしまっていてアレなんですが、今回の内容だけでもNULLの判定はVBA用の記述にする必要がありますね

締め実日 Is Null
↓
IsNull(締め実日)

※VBA記述のマナーは無視しているので~
VBA記述には省略可能なものがありますが、記述しておくのが一般的なものや、問題なくとも意味合いが正確でないものもあります

Function ステートメント
ざっくりいうと、データ型はしっかり記述したほうが良いです

Function 締め日付(締め実日, 売上日付)
↓
Function 締め日付(締め実日 As Variant, 売上日付 As Date) As Date

締め実日はNULLを扱うため、Variant型である必要があります。また、データ型の省略時はVariant型となるため、省略しても同じですが、明示することにより、NULLを扱うことがあるし、それを意図してやっているということが読み取れるようになります
逆に、そのほかの引数についてはしっかりそれぞれのデータ型を使うと指定(制限)をしておきましょう

関数の戻り値のデータ型

Function 締め日付(締め実日 As Variant, 売上日付 As Date) As Date

を記述するかどうかは個人差が出そうですが、日付型なら日付型を指定しておくと諸所で日付型のデータとして扱ってくれるのでよりよいと思われます(文字配置の「標準」が右寄せになったりとか)

あと、変数の名前からデータの内容がいまいち正確でないものには何か手を入れたほうがいいです

Function 支払期日(支払月間, 支払日間, 締め日付, 支払実日)
↓
Function 支払期日(支払月間, 支払日間, 締め日付, 支払実日)
'支払実日が「0」は末日指定を表す

「日付」に「0日」はありませんし、「0の指定が1の1つ前ではない」ので、直感と実態が合わなくなります。末日指定をどうデータベース化するか?は悩みどころではありますが、とりあえず今回はコメント記述で対応ということで

あとはまぁ、「1行で記述する必要はない」ので、入れ子になりすぎて見づらい記述を分解するとかですかね。どこまでやるかはその時の内容次第です

通報 ...