Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2016)
Accessで日割り計算をしたい
投稿日時: 21/06/14 09:17:47
投稿者: DIVAA

いつもお世話になっております。
表題の件につきまして質問致します。
 
ただいまAccessで交通費を計算するフォームを作成しています。
ほとんどは通勤手段の金額×日数で出すのですが、たまに日割り計算が必要になります。
例えば
10日間だけ車で出勤し、残りの20日は電車で来た場合
10,000円(一か月の車通勤費)÷30=333円
333円×10日間=3,333円
     +
12,000(1か月の定期代)÷30=400円
400円×20日間=8,000円
 
=11,333円
 
上記のように計算をしたいです。
計算式を作ってみようと思いましたが複雑になりなかなかできませんでした。
 
本当は、直接交通費の欄に記入したいのですが、クエリで計算しているためフォーム上で入力することができず困っています。
 
どのように作ればユーザーが使いやすく、分かりやすいのでしょうか?
 
お手数ですがアドバイスをいただきたいです。
宜しくお願い致します。

回答
投稿日時: 21/06/14 09:45:52
投稿者: Suzu

テーブル構造も何も判らないので、詳しくは答えられませんが
 

引用:
本当は、直接交通費の欄に記入したいのですが、クエリで計算しているためフォーム上で入力することができず困っています。

 
Access VBA の板なので、VBAを使用しても良いのでしょうから
 
クエリにて、交通費を計算するのではなく、
レコード移動時イベントにて、テキストボックスコントロールの 既定値 に、
計算した交通費を入れてしまえば、ユーザーに、直接交通費を入力させる事ができます。
 
ただし、単票フォーム以外の複数のレコードが表示されるフォームですと
カレント以外 の レコードの既定値に カレントの既定値が表示されます。

投稿日時: 21/06/14 10:17:31
投稿者: DIVAA

Suzu様
返信頂き誠にありがとうございます。
 
テーブル構造の記載を忘れてしまい申し訳ありません。
☆交通費テーブル
社員番号:数値型
距離:数値型
通勤手段:テキスト型
交通費:数値型(クエリにて自動計算)
以上です。
 
交通費を算出するのに通勤手段と距離によって出しています。
クエリにて交通費を自動計算しています。関数はSwitch関数です。
 
フォームは帳票フォームで一覧で見れるようになっています。

引用:

レコード移動時イベントにて、テキストボックスコントロールの 既定値 に、
 計算した交通費を入れてしまえば、ユーザーに、直接交通費を入力させる事ができます。

 
アドバイスありがとうございます。
レコード移動イベント時でテキストボックスに直接入力する方法があるのですね!
初めて試みるためもう少しアドバイスを頂きたいです。
お手数ですが宜しくお願い致します。
 
追加で必要な情報等ありましたらご指摘お願いします。[/code]

回答
投稿日時: 21/06/14 14:11:00
投稿者: Suzu

引用:
レコード移動イベント時でテキストボックスに直接入力する方法があるのですね!
初めて試みるためもう少しアドバイスを頂きたいです。

引用:
フォームは帳票フォームで一覧で見れるようになっています。

 
いえ。。
引用:
ただし、単票フォーム以外の複数のレコードが表示されるフォームですと
カレント以外 の レコードの既定値に カレントの既定値が表示されます。

単票の場合と、おことわりしています。
 
レコード移動時に、移動先のレコードの各フィールドの値を元に計算を行うのです。
それを、既定値プロパティーに与える方法です。
 
帳票フォームの既定値に値を与えた場合、
その 既定値の値は、そのコントロールの値が Null のコントロールに表示されます。
 
なので、カレントレコード以外の 交通費が Null の 交通費の 値としては 正しくない値が表示されます。
 
それでも良いのですか?
 
 
適当に テキストボックスを追加、コントロールソースを設定し
 
Private Sub Form_Current()
 Me.TextBox1.DefaultValue = 〜〜
End Sub
 
テストを行ってみてください。
 
 
 
 
引用:
ほとんどは通勤手段の金額×日数で出すのですが、たまに日割り計算が必要になります。
例えば
10日間だけ車で出勤し、残りの20日は電車で来た場合
10,000円(一か月の車通勤費)÷30=333円
333円×10日間=3,333円
     +
12,000(1か月の定期代)÷30=400円
400円×20日間=8,000円
  
=11,333円
  
上記のように計算をしたいです。

 
引用:
☆交通費テーブル
社員番号:数値型
距離:数値型
通勤手段:テキスト型
交通費:数値型(クエリにて自動計算)
以上です。
  
交通費を算出するのに通勤手段と距離によって出しています。
クエリにて交通費を自動計算しています。関数はSwitch関数です。

 
1:計算根拠の内容に齟齬がある様に見受けられるのですがいかがでしょうか。
 
2:Switch関数との事ですが、具体的に、どの様な関数になっているのでしょうか。
 
3:交通費テーブル のフィールドとして、「交通費」フィールドがあるにも関わらず、
 その値をクエリにて、自動計算しているとの事。
 クエリにて計算すると言うことは、クエリ上では、演算フィールドとなりますから
 テーブル上に、フィールドを持たせる事はありません。
 
 クエリ上で計算した値を、VBA等を用いて、
 テーブル上の「交通費」フィールドに代入しているのでしょうか?
 
 
4:今回の要望の様な計算式に当てはまらないレコードの頻度がどのくらい発生するのでしょうか?
 
 データベースとして、交通費の履歴(引っ越し等で距離が変わる・経路、交通手段が変わる)を保存
 するのであれば、社員番号の他に、適用日や、適用フラグのフィールドを持たせ 履歴を管理しますが
 
  今回のテーブル構成を拝見する限り、「社員番号」が主キーになる構造とお見受けします。
  と言うことは、社員番号 1つ に対し、交通費 は 1件のレコードですよね。
 
  となると、交通費が変わる事は まれ ではないのでしょうか?
  その為に計算式を適用する必要があるのでしょうか?
  その時だけ、手入力にて編集すれば良い様に思います。
 
 あくまでも計算にて、算出したい と言うことであれば
 テーブル上に、その計算根拠となる数値(今回であれば、適用日数、定期代等)を
 フィールドの値として保存すべきと思います。

投稿日時: 21/06/15 10:54:12
投稿者: DIVAA

Suzu様
コメントありがとうございます。
確かに計算で出すメリットがないことに気づきました。
最近交通費の手当が大幅に変わり、そのとき200人分の手当を変えなければいけなかったため
Accessで作成したのですが、当分の間そういうこともないと思うので都度入力に変更したいと思います。
 
交通費に関して別件で、1か月ごとに保存できる方法を教えて頂きたく別スレッドをたてて質問致しますので
こちらは解決済みとさせていただきます。
 
ご迷惑をお掛けし申し訳ございませんでした。