• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAを使わず、計算式を使いまわし)

VBAを使わず、エクセルで勤務表を作成する方法とは?

このQ&Aのポイント
  • VBAを使用せずに、エクセルの計算式を使いまわして勤務表を作成する方法について紹介します。
  • 具体的には、出勤時間と退社時間を入力すると、勤務時間が自動的に計算されるようになります。
  • 現在の計算手法と比べて、日にちごとに異なる計算式を用意する必要がなくなり、メンテナンスやファイルサイズの問題を軽減することができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.13

しばらく読んで考えてみましたが、私も、少し口を挟ませていただきます。こちらの話が、不要だと思えば、どうぞ、補足やお礼には書かないでいただきたいです。また、感情的な表現は控えてください。このような掲示板では、ご自身のプライドを損なうようなこともあるでしょうが、それは回答を得るために仕方がありません。 >すでに何人かの回答者の方には質問を理解していただき回答ももらっているので 私にはそうは思えません。ふつう、このようなOffice系の掲示板で、12件の回答まで続く頃には、ある程度の見通しが立っているはずですが、そのような風には思えません。いたずらに、回答が増えているだけだと思います。初めから、「VBAありき」で進められても、具体的な質問を何一つしているとは思えないからです。 「VBA」で出来るものを、使わないで、代わりのものはないかというご相談のように思えますが、経験的に、そのような必要があるとは思えません。 ただ単に、ご質問者さんは、Excelの使い方は独学か、かなり偏った覚え方をしているような気がします。#4/#12さんが、説明した内容を少しも理解していないようですから、基礎的な使いこなしに難があるように思われます。 すでに、これらの内容は出ていますが、あらためて書きますが、 キーワードは、   「オートフィル・コピー」「絶対参照と相対参照」「テーブル」 です。これを押さえてください。 「テーブル」を除く、2つは用語はともかく、その使いこなしや存在を知らないと話にならないのです。バージョンは書かれていませんが、添付画像をみると、2007以上ですから、その範囲を「テーブル」に変換するのが、楽です。 >VBAのFunctionプロシージャのように、計算式は1セットのみで、毎日の出勤、退勤時間を引数で渡して、結果を返すような方法はできないのでしょうか? 誰も指摘していませんが、「VBAのFunctionプロシージャ」とは何でしょうか?Accessでは、ほとんどが、Functionプロシージャですが、Excel VBAでは、その扱いが慣れていない人のみが書くことが多いです。私は、何千件のVBAのプログラムを書いていますが、Excel VBAで、Function プロシージャを書いた覚えは、10個にも見たないです。通常は、Sub プロシージャです。同じFunction でも、「ユーザー定義関数」です。機能が全然違います。文面からすると、VBAの「ユーザー定義関数」だと思います。 >休日やら、遅刻やら早退やら、休憩やらをその他条件を考慮した上で結果に表示させます。 最初の数件(1~3)の補足・お礼の文面をみて、数式で、複雑と言われても、ここの回答者さんたちの多くにとって、それは、たかが知れています。どこの掲示板でも、同じような質問は解決しています。ただし、質問で、他人に分からせる技術が明暗を別けます。言い換えると、後出しの質問や内容の変更は、ダメです。 私自身、勤務時間の計算は、やったことはありますが、それは、計算式に付随する要素が4件程度あって、それをまとめるというだけの話です。その程度のことは、会社員(主に工場勤務)の人たちで管理部門や総務の方は、誰でも経験していますから、大変なことだとは思いません。単に、それぞれの事情があって説明がしづらいというだけのことだと思います。この程度の話で、好きで作るならともかく、VBAなど必要とは思えません。 ご自身が、複雑に考えているだけで、「計算エリア」などという発想を、盛り込む、つまり、今の計算式そのものを壊したくないというだけで、具体的な内容を見せずに、考えだけを主張しているように思われます。 また、区役所や市役所などの外部組織に、ExcelやOffice を教えるボランティアのアドバイザーを用意していることもありますので、もしあれば、スポットで教えてもらうのもよいかもしれません。

sukkkiyaki
質問者

お礼

回答ありがとうございます。 下記回答者さまたちに感情的にコメントしてしまったことを反省しております。 確かに、複雑といっているだけで、具体的な例を挙げなかったことはよくなかったと思います。 どのように複雑か、簡単に書きます。(エクセルになれている方なら複雑でないかもしれませんが) 始業時刻と、就業自国以外の情報として、下記があります。 ・休憩時間(休憩時間の回数、また時期によって休憩時間や、休憩時間の開始時間が変わります) ・半日勤務か(午前、午後、時期(月)でも条件が変わります。) ・有給休暇か ・休日か、また、休日出勤か ・業務内容は何か ・すべて漏れなく記入されているか(チェック機能) ・早退、遅刻などした場合の対処(規定時間からのマイナスなど) ・どれだけ残業しているか(残業時間によってはアラームを出す機能) ・その他こまごまとした処理 上記を実現しようとすると、どうしても複数セル(というか、ある程度の計算エリア)が必要になってきます。ひとつのセルで、一行の式だけで実現するのは、到底無理です。 ですので、具体的な例は面倒だったので出さなかったのです。 ちなみに、現在作っている勤務管理表では、一日の判定につき、5×32(=160セル)のセルを使っています。(もちろん、すべて計算式のみでなく、テーブルの見出しや、説明文も込みで) それから、VBAについては私もそれほど詳しくはないのですが、間違った表現があったかもしれません。 >「VBAのFunctionプロシージャ」とは何でしょうか? Functionプロシージャ=ユーザー定義関数との認識でした。(違ってたらすいません) http://www.moug.net/tech/exvba/0100042.html http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_110_02.html

その他の回答 (12)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>そこで、VBAのFunctionプロシージャのように、計算式は1セットのみで、毎日の出勤、退勤時間を引数で渡して、結果を返すような方法はできないのでしょうか? 質問の趣旨が分かり難いのですが・・・・・ 普通に考えて貼付画像の計算エリア(F列)は必要ありません。 単純にD2へ=C2-B2と入力して下へコピーすれば良いことです。 この時、B列とC列が空欄では0が表示されるので見苦しいことになります。 対策としてはIF関数でB列またはC列が空欄のときD列が空欄となるように設定すれば良いでしょう。 また、時間の計算ではマイナスの結果になる式でエラーが起こりますので、それも防止するには下記の式が適当かと思います。 =IF(B2<C2,C2-B2,"") 必要数を下へコピーすれば行番号が自動的に変化しますので目的に合うと思います。 尚、時刻と時間は意味が異なりますので間違わないようにしてください。 「出勤時間」 → 「出勤時刻」 誤りなので訂正してください。 「退社時間」 → 「退社時刻」 誤りなので訂正してください。 「勤務時間」 「出勤時刻」から「退社時刻」の間なので正しい表現です。

sukkkiyaki
質問者

補足

※話を簡単にするための一例です。この程度ならダイレクトにC1に結果を表示させることは簡単ですが、実際にはさまざまな条件があるため、計算はもっと複雑です。 ↑注釈は読みましたか? 実際にはもっと果てしなく複雑な計算式です。休日やら、遅刻やら早退やら、休憩やらをその他条件を 考慮した上で結果に表示させます。 >この時、B列とC列が空欄では0が表示されるので見苦しいことになります。 そんなことは知っていますが、今の議論はそこではないです。 ちなみに、「出勤時間」とすると、どのように意味が変わってくるのでしょうか?

  • k-josui
  • ベストアンサー率24% (3220/13026)
回答No.1

規則性があれば、セルの相対参照、絶対参照を使い分けてセルコピー出来ると思いますが、それでは無理なほど複雑なのでしょうか?

sukkkiyaki
質問者

お礼

補足追加です。 >無理なほど複雑なのでしょうか? 無理ではないです。もちろん同じものをコピーしていけば出来上がります。 ただ、出来上がったものを見ると、ごちゃごちゃしていて美しくないですし、後々改変を したい場合に、メンテナンスが面倒になるのを懸念しています。

sukkkiyaki
質問者

補足

それは毎日分計算式を用意することに変わりはないということですか?

関連するQ&A