- ベストアンサー
関数やVBAについて
- 関数やVBAについて理解が不十分な方のため、関数の使い方やVBAの基礎について説明します。
- 旅費精算書の作成に関数を使用するため、関数の使い方と旅費規則に則った計算方法を解説します。
- VBAの導入により、旅費精算書の自動化が可能になります。詳しいVBAの使い方について説明します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いちから作ろうと思うとそれなりにエクセルの知識も必要な内容です。 1と2だけなら、 「出発日」、「到着日」、「出発時間」、「到着時間」で4セル分用意し(時間のセルは16:00といった表記で)、 到着日-出発日=宿泊日数なので、宿泊日数×2600=「宿泊日当」 但し~6時前~10時を超えて~部分はとりあえず「早朝加算」「夜加算」といった名前にすると、 早朝加算セルは=if(出発時間<6/24,750,0) 夜加算セルは=if(到着時間>22/24,1150,0) ※時間は24時間で1となるので、6時は6/24=0.25となる。 よって、出発時間が0.25より小さいなら750、大きいなら0というif関数の式。 2は出発日=到着日のとき、到着時間-出発時間の時間を計算して、これを4時間未満~5100円の表からindex関数とmatch関数で計算したいところ。 といったところでいけるけど、これに3以降の条件が絡むので、それらを一つにまとめていくと複雑になってきますね。 ここまでが理解できるなら、3以降も盛り込んだ清算書が作れるかも。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
こんなのは、ルールや事実認定が複雑すぎて、エクセル関数「1式」や「数個のケースを、IF文のネストで分けるエクセル関数式」(結果は1式だが)では無理でしょう。そういう無理ということを理解せず、質問している状態が問題でしょう。 中間作業データ(セル、列に)を一旦作って、わかりやすく(式を簡単に)する方式も活用するとよいと思う。 == まずフローチャート式に内容を整理すること。よく判った社内の数人で、誤りないか(把握漏れ、ケース数え上げ漏れ、適用条件間違い、が多いと思うが)討論すること。箇条書き方式も活用できると思う。 計算式は最終区分段階ではそんなに複雑ではないだろう。 === 以上出たらコンピュータ処理するのだが、本件では複雑になるのは目に見えて居るので、VBAで処理する(記述する)ほかないだろう。 本件では、場合分けが重要・複雑と思うが、関数式1式では限られている。 VBAでは (1)変数とういう中間結果を一旦記号化できる。 (2)場合分けの処理も、分かち書きや色んな処理モジュールへ分岐を行える (3)データベース的な処理が出来る(そういうモジュールがある場合がある) ので、関数だけでやるのは、早やばやとあきらめる方がよいと思う。 関数にもVLOOKUPとか配列数式とカ言うのもあり、使える局面はある場合がある。 システムのプロでも(部外者であるがため、熟練してないため、社内ルールの理解が及ばず、またテストデータ不備で)場合分けを漏らしたり、間違えたりして、後日エラーで問題になることは起こりえる、ほどの問題だと思う。 ーーー 本課題のフローチャート的整理は、読者・回答者がやれるほど簡単(内容的、所要時間的)ではないと思うので、本件読者に当てにする(頼む)のは無理でしょう。 == 付け足して、ブレーンストーミング式に、場合をメモに文章にして書き出して、それを算出する条件項目などを整理する方法も、常識的ですが、良いのでは。
お礼
ありがとうございました。
- MT765
- ベストアンサー率57% (2080/3618)
出発日時や到着日時、日帰りか泊まりか、研修なのかどうか等のデータを入力してそれに基づいた金額が出てほしいんですよね。 それらのデータが入力されたら「◯◯の場合」という条件(IF文などの条件式)に基づいて計算(計算式)されるようにするのが基本になります。 まずは旅費規則を一つずつ 「条件式」と「計算式」で組み直してみましょう。 例えば1は 条件式(宿泊を要する出張の場合)であれば 計算式(2600円×日数)の宿泊日当を支給 になりますよね。 ここで条件として必要なのは「宿泊を要するかどうか」「日数は何日なのか」となります。 これは都度入力させることになります。 また 条件式(午前6時前に出発した場合 or 午後10時を超えて到着した場 合) 計算式(1150円×その回数)を加算 というのも必要になります。 ここで必要な情報は出発・到着時刻です。 こんな感じで規則をすべて必要なデータと条件式、計算式に分解して金額を出して最終的には合計する感じになるのではないでしょうか。 これ全部を回答でVBAのコードにするのは流石に厳しいので、まずはご自分で上記のように文章でできるところまでやってみてください。 関数やVBA化はそのあとですね。
お礼
ありがとうございました。
お礼
親切に対応いただきありがとうございます<(_ _)>