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

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

VBAを使わず、計算式を使いまわし

エクセルで勤務表を作っています。 たとえば、B2に出勤時間を、C2に退社時間を入力すると、D2に勤務時間が表示されます。 現在の計算手法は、A1、B1の値を別セルからそれぞれ参照し、計算をし、結果を別セルに表示させます。その結果をC1セルが参照して、C1セルに表示させるような手法をとっています。 ※話を簡単にするための一例です。この程度ならダイレクトにC1に結果を表示させることは簡単ですが、実際にはさまざまな条件があるため、計算はもっと複雑です。 この手法だと、同じ計算式を日にちごとに用意しなければいけません。 計算式がそこそこ複雑なので、毎日分用意すると、メンテナンスやファイルサイズの問題などあまり よろしくないと思っています。 そこで、VBAのFunctionプロシージャのように、計算式は1セットのみで、毎日の出勤、退勤時間を引数で渡して、結果を返すような方法はできないのでしょうか?

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

  • ベストアンサー
回答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/8248)
回答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/13025)
回答No.1

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

sukkkiyaki
質問者

お礼

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

sukkkiyaki
質問者

補足

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

関連するQ&A

  • Excelでの深夜勤務時間計算

    お世話になります。 Excelで深夜勤務時間を計算したいのですが、 うまくいきません。 具体的には、 セルA1:15:00(出勤時間) セルB1:2:00(退社時間) 等と入力されているので、セルC1に 22時から5時までの時間である、「4:00」を 計算したいのです。 なおかつ出来れば分かりやすいように、セルB1は26:00という表示にしておきたいと思います。 ただし、B列の数値は、24:00以前の場合もあります。 ご存知の方、どうぞご教授くださいませ。

  • 残業時間だけを数式で計算したい(エクセル2007出来れば、2000でも

    残業時間だけを数式で計算したい(エクセル2007出来れば、2000でも見れたほうがいい)のですが、 計算式の答が ###########になってしまいます。 始業時間が9:00 (セルA1) 退勤時間が17:20 (セルB1) 他休息時間    (セルC1) お昼休憩が0:50 基本勤務時間7:30 超過勤務時間だけを計算したいので、 IF(A1=0,"0:00",(B1-A1)-"7:30"-"0:50"-C1) と入力しています。 計算結果が上手く表示される方法を教えて下さい。 セルの表示設定は ユーザーでh:mm を選択しています。 よろしくお願いします。

  • エクセルの時間計算の数式を教えてください

    勤務管理をエクセルで作成しています。 19時前と、19時後の時間給を分けて支給することになり、 分けて集計をしたいのですが設定の仕方がわかりません。。。 出社12:00 退社22:00 とすると 12:00~19:00 の 「7:00」 19:00~22:00 の 「3:00」 を自動計算したいのですが、どうしたらよいでしょうか? ただ、出社時間と退社時間は、出勤していない日は0:00と表示するようになってしまってます。 そのため、 Aセル:出社時間 Bセル:退社時間 Cセル:19:00 Dセル:B-A-E Eセル:B-C にしみましたが、出社していない日の時間計算がうまくできません。。。 手計算は膨大な作業になってしまうので、自動計算させる方法を教えていただけると大変ありがたいです。 宜しくお願いします。 表示方法

  • 関数での日当計算の方法

    出勤時間9:00(セルA1) 退社時間18:00(セルB1) 休憩時間1:00(セルC1) 実労働時間(セルD1)B1-A1-C1=8:00と設定しました。  たとえば時給1400(セルE1)の場合、一日の給料を計算する時、D1*E1で11,200と計算して欲しいのですが、467という計算結果になってしまいます。 なにか計算させる方法はありますか? 関数を使うのか、または違う方法があるのか、分かりません。 教えてください。

  • EXCELの時間計算

    セルA1に、「9:43:20」と時刻が入力されています。 セルB1に、「3.2」と時間(分)が入力されています。 セルC3には、A1の時刻から,B1の時間が経過した後の時刻を 表示させたいです。 ※B1の「3.2」を3.2分(3分12秒)として計算したいです。 C3の計算式を教えてください。 ※計算した結果の時刻は,9:46:32です

  • エクセル 違うシートに計算式がある場合

    エクセル2000を使っています。 下記の計算をしたいのですが、方法を教えてください。 1.Sheet1 A1とB1に計算したい元の数値が記入されています。 例えば、A1=1 B1=2 2. Sheet2 のA1とB1に数値が入る事としてC1に計算結果が出るものとします。 3. Sheet1のC1にSheet2のC1の内容を表示したい。 4. Sheet1 A2、A3・・・・・、B2、B3・・・・・に入力した後で、C2、C3・・・・・・に Sheet2のC1で計算させた結果を自動的に入力したい。 別の言い方をすれば、Sheet2 のA1・B1が関数の入力するところにあたり Sheet2のC1が関数の出力(というか、計算結果)にあたります。 Sheet1からSheet2を関数のように使いたいのです。 Sheet1 ____ A_____B_______C 1___1_____2______3 2___2_____3______5 3___5_____8______13 4___9_____1______10 5___4_____5______ 9 Sheet2 ____A_____B_____C 1________________ =A1+B1 2_____________________ こんなイメージです。 Sheet2で計算の入力に対応するセルがA1・B1 計算結果が書いてあるのがC1 実際は、大きな表を参照しながら計算するので、色々計算した結果(途中計算は他のセルも使います)がC1に表されます。 以上、よろしくお願いします。

  • EXSEL2007 時刻計算

    A1セルに 11:00と入力 B1セルに他セルからの計算結果時刻が 2:30 と出た場合、C1セルにA1セルとB1セルの合計を求めたら13:30と表示されます。 B1セルの計算結果がマイナスの場合、当然、A1セル時刻から引き算結果がC1セルに表示されます。B1がマイナスのときは計算に反映させたくないのですが、何か方法がありませんか。

  • VBAでの勤務時間計算

    基本的なことですいません。 18:00-8:30といった勤務時間の計算をしたいのですが Range("C1")= Range("B1")-Range("A1") だと結果がでません。 昼休みや残業時間も計算しなければならないのですが まずは、単純に引き算すらできなくて困ってます。 ご回答の程よろしくお願いいたします

  • この計算式の書き方(エクセル)

    あるセルで  Y=Ax(B+22) Yがこのセルにて表示させたい計算結果の値 AとBはそれぞれ別のセル (それぞれある値が入力される) という計算を させたいのですが どのように記述すればよいのか 教えてください。

  • セルの文字式の計算をVBAで行いたい

    A1のセルに "100+5n" という文字式が入っている状態で VBAにてこのセルの文字式計算を行いB1のセルから順に結果を出力したいと思っています。 "n"は1から順に指定された数まで1づつ増えていくようにし B1のセル:105、C1のセル:110、D1のセル:115 ・・・・ と結果がなるようにしたいのですが、VBAでどのように記述すればいいのか悩んでいます。 VBAを使わずにExcelの関数で計算できるのならそれでもよいと思っています。

専門家に質問してみよう