• ベストアンサー

エクセルで勤務表をつくりたいのですが、いい方法がわかりません

       A B C D E F G~  名前/日付 1 2 3 4 5 6 7 ~31    合計 1XXX X子 日 ○ ◎ 有 公 欠 ~ 2 日勤     1                 17 3 夜勤      1                2 4 有休         1             2 5 公休          1            8 6 欠勤             1         1 上の表のような勤務表をエクセルで作成しています。行2から6はグループ化して隠せるようしています。 IF関数を使って該当の行に”1”をたてると行1に値を返すようにしました。 2~6以外にもいろいろなパターンがあるのですが、IF関数は7つまでしか無理なので今は手入力しています。また、合計を他のシートに飛ばして管理しています。 コード化してVLOOKUP関数で値を返す方法も考えたのですが、合計を出すのに上の表だとわかりやすいのでなにかいい方法はないか困っています。エクセルはあまり詳しくないのでどなたか教えていただけないでしょうか? (ちなみに、夜勤の入りは”○”出は”◎” 有/休・休/有・日/有・早出-日°・遅出-日.などなど)

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

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

はじめまして =IF(C3,"日","")&IF(C4,"○","")&IF(C5,"有","")&IF(C6,"公","")&IF(C7,"欠","") のように、関数をネストするのではなく、結果を「&」を使って連結するのはいかがでしょうか? これならば、「7つまで」の制限を受けません(数式には一応“字数制限”はありますが、通常はそこまで使うことはないと思います。) もし「日勤」で「公休」などというあり得ない値が入力されると「日公」となるので、分かると思います。 「条件付書式」を使って、あり得ない組み合わせで入力されたら、色が変わるなどしておけば、ミスはもっと減ると思います。

myun4016
質問者

お礼

ありがとうございます レベルの低い私が求めていたものです(^o^)丿 これで90%対応できそうです。 休/有などの場合はセルの中にうまい具合に収まらないので セルに斜めの罫線を引き小さめの字を2段に表示すしてCOPYしていますが他に方法はないですよね。 自分でオフィスアシスタントのいるかちゃんに聞きながらある程度までたどりついたのですが・・・ もっと早くにこちらで質問させていただけばよかったです。

その他の回答 (5)

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.6

エクセルにはフォントサイズを自動調整してセルに収まるようにする機能もあります。 ただ、「画面ではセルに収まっているけれど、“印刷すると”はみ出る」ということがあります。こればかりは、エクセルの能力不足なところなのであきらめてください。 フォントサイズの自動調整については以下のサイトを参照してください。 http://kokoro.kir.jp/excel/character-reduction.html http://www.relief.jp/itnote/archives/000126.php http://excel.life.coocan.jp/main/haichi_syukushou.html

myun4016
質問者

お礼

ありがとうございました。 なんとかいい勤務表ができそうです。

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.5

No.3です。 うっかりしていました。 1が未入力のときのことを考えていませんでした。 B2 =IF(COUNT(B3:B7),MID("○◎有公欠",MATCH(1,B3:B7,0),1),"") に修正してください。

myun4016
質問者

お礼

ありがとうございます。 挑戦してみます。

回答No.4

私もリスト入力で考えたのですが 300人では 大変ですか? AJ2:日 勤 AK2:日 AJ3:夜勤入 AK3:○ AJ4:夜勤出 AK4:◎ AJ5:有 休 AK5:有 AJ6:公 休 AK6:公 AJ6:欠 勤 AK6:欠 という表を作り 2列目に(B2セル) 【=IF(B3="","",INDEX($AK$2:$AK$6,B3,1))】 左に オートフィル そして、3列目には、日勤なら「1」夜勤入りなら「2」夜勤出なら「3」有休なら「4」公休なら「5」欠勤なら「6」と数字を入力 計は AL2セルに、 【=COUNTIF($B$2:$AF$2,AK2)】下にオートフィル はじめは、3行目にリストから入力して その3行目の「日勤」から「日」を拾い出してと 思ったのですが (1)B3セルクリック (2)[データ]→[入力規則]クリック (3)[入力値の種類]▼ 「リスト」 (4)元の値【=$AJ$2:$AJ$6】 [OK] (5)左にオートフィル(~AF) (6)B2セルに【=IF(B3="","",VLOOKUP(B3,$AJ$2:$AK$6,2,0))】 (7)左にオートフィル(~AF)

myun4016
質問者

お礼

丁寧な説明ありがとうございます。 すごい勉強になりました。 経理でソフトを買うという話も出ていたのですが 何とかいけそうです。 また、わからないことがあったら質問させていただきます。

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.3

___A__B__C__D__E__F_ 1_____1__2__3__4__5_ 2__X子_○_◎_有_公_欠_ 3_日勤__1_________ 4_夜勤____1_______ 5_有休______1_____ 6_公休________1___ 7_欠勤__________1_ B2 =MID("○◎有公欠",MATCH(1,B3:B7,0),1) 右方向・→ でどうですか? MATCH(1,B3:B7,0)は何番目に1が現れるか。 例えばもしそれが3[番目]だったら MID("○◎有公欠",3,1) は文字列"○◎有公欠"の3番目から1文字分を取り出すので、 "有"を返します。

myun4016
質問者

お礼

お礼がおそくなりってスミマセン。 丁寧な説明ありがとうございました。 いろいろな関数があって勉強になります。 時間をかけていい方法を見つけたいと思います。

  • CMLT
  • ベストアンサー率40% (143/357)
回答No.1

行2以降を無くす方法のご提案。 ○◎有公欠などの記号を入力規則>リストで設定しておき、ドロップダウンリストから選択できるようにしておく。 合計の算出にはCOUNTIFやCOUNTAなどの関数を使う。 また例えば早出-日、日、遅出-日などの、日勤の中にもシフトに時間差があるものを、仮にD1、D2、D3などの記号にしておけば、その合計は =COUNTIF(範囲,"D?") の様にワイルドカードも使える。休み以外の合計の式の例ととしては、 =COUNTA(範囲)-COUNTIF(範囲,"有")-COUNTIF(範囲,"公")-COUNTIF(範囲,"欠") EXCEL2007であればCOUNTIFS関数が使えるのでもっと簡単になる。

myun4016
質問者

お礼

早々に回答頂きありがとうございます。 入力規則・・・考えもつきませんでした。 今迄使った事がないので今試してみました。 私の理解が浅いのだと思うのですが、一つのセルごとにドロップダウンリストから選んでいくのでしょうか? 300人以上の人の勤怠なのでなるべく簡単でかつ正確な方法は無いものでしょうか?

関連するQ&A