• 締切済み

関数を教えて下さい。

月曜日  佐藤  高橋  黒田  9:00   佐藤      黒田 10:00   佐藤  高橋  黒田 11:00   佐藤  高橋  黒田 12:00   佐藤       黒田 火曜日   山田  田中  右田  黒田  9:00   山田       右田  黒田 10:00   山田       右田  黒田 11:00   山田  田中       黒田 12:00   山田  田中 出勤表として上記のような表を作り管理しています。別の名簿シートに出勤している曜日の範囲に名前があるとその曜日を返して表示しているシートがあるのですが現在はそこに手で時間を入力しています。しかし100名以上在籍しており勤務時間もよく変動するので入力間違いが生じます。その為その下に勤務時間も自動で表示したいと考えています。しかしどのような関数を入れれば良いのか頭を絞って考えましたが分かりません。どなたか力を貸していただけないでしょうか 今はこのようになっています。〔曜日は自動表示になっています〕 佐藤   月  0  高橋   月  0  田中    0 火 黒田   月  火  右田       0    火 山田   0  火 それをこのように自動表示したいです。           佐藤     月       9:00  12:00  高橋     月      10:00  11:00   田中     火      11:00  12:00  黒田     月            火      9:00  12:00   9:00  11:00         右田             火      9:00  11:00 山田      火      9:00  12:00 佐藤さんの9:00を表示する計算式と12:00を表示する計算式を教えてください。よろしくお願いいたします

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

お示しの元の表がシート1に有って、A1セルに曜日が、その下方に時刻が、さらに数行空けて曜日が、その下方に時効が・・・のように入力され、曜日の右側の列には氏名が、また、時刻の行では該当するところの列に同じ氏名が入力されているとします。 そこで例えばH列までが利用されているとして、J列から右の列を作業列とします。 J1セルから右のセルには、佐藤、高橋、田中、黒田・・・のようにセルごとに氏名を入力します。 J2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(NOT(ISNUMBER($A2)),"",IF(OR(J$1="",COUNTIF($B2:$H2,J$1)=0),"",IF(OR(AND(ISNUMBER($A2),NOT(ISNUMBER($A1))),AND(ISNUMBER($A1),INDEX($B:$H,ROW()-1,MATCH(J$1,$B2:$H2,0))="")),INT(MAX(J$1:J1))+1,IF(AND(ISNUMBER($A2),INDEX($B:$H,ROW()+1,MATCH(J$1,$B2:$H2,0))=""),MAX(J$1:J1)+0.1,"")))) 次にお求めの表ですがシート2に表示させるとしてA1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(MOD(ROW(A1),2)=0,INDEX(Sheet1!$J$1:$XX$1,ROUNDUP(ROW(A1)/2,0))=0),"",INDEX(Sheet1!$J$1:$XX$1,ROUNDUP(ROW(A1)/2,0))) B1セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>COUNTA(Sheet1!$J$1:$XX$1)*2,"",IF(MOD(ROW(A1),2)=1,IF(COUNTIF(INDEX(Sheet1!$J:$XX,1,MATCH($A1,Sheet1!$J$1:$XX$1,0)):INDEX(Sheet1!$J:$XX,1000,MATCH($A1,Sheet1!$J$1:$XX$1,0)),ROUNDUP(COLUMN(A1)/2,0))=0,"",IF(MOD(COLUMN(A1),2)=1,INDEX(Sheet1!$A:$A,ROUNDUP(COLUMN(A1)/2,0)*10-9),"")),IF(AND(MOD(ROW(A1),2)=0,MOD(COLUMN(A1),2)=1,COUNTIF(INDEX(Sheet1!$J:$XX,1,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)):INDEX(Sheet1!$J:$XX,1000,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)),ROUNDUP(COLUMN(A1)/2,0))=1),INDEX(Sheet1!$A:$A,MATCH(ROUNDUP(COLUMN(A1)/2,0),INDEX(Sheet1!$J:$XX,1,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)):INDEX(Sheet1!$J:$XX,1000,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)),0)),IF(AND(MOD(ROW(A1),2)=0,MOD(COLUMN(A1),2)=0,COUNTIF(INDEX(Sheet1!$J:$XX,1,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)):INDEX(Sheet1!$J:$XX,1000,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)),ROUNDUP(COLUMN(A1)/2,0)+0.1)=1),INDEX(Sheet1!$A:$A,MATCH(ROUNDUP(COLUMN(A1)/2,0)+0.1,INDEX(Sheet1!$J:$XX,1,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)):INDEX(Sheet1!$J:$XX,1000,MATCH(OFFSET($A1,-1,0),Sheet1!$J$1:$XX$1,0)),0)),"")))) 次にB列から右横の列を選択して右クリックし、「セルの書式設定」から「表示形式」で時刻を選択してOKします。 最後にはB1セルとC1セルを結合セルに、B2セルとC2セルは文字を中央に配置する操作をして、それからB1セルとC2セルを範囲としてコピーし、右横方向にドラッグし、「書式のみコピー」で決定します。 その後はB1セルから最後の列の2行目までを範囲として選択し、下方にドラッグ操作をして「書式のみコピー」で決定すれば完成です。 複雑な関数です。初めはこちらの指示通りで一度試験してみてください。その後にご自分のケースに当てはめてください。 から下方のセルには1行おきに

hinata0915
質問者

お礼

すぐにお返事できずに申し訳ありませんでした。ご指導いただいている様に一度やってみます。簡単なLEN関数?等で出来るのでは??と思っていたのですが全く筋違いであったようでお恥ずかしいばかりです。おっしゃっていただいているように1つのシートの中に全曜日のシフトが入力されています。このエクセルが私たちの業務の全ての主軸になっている状況でこのエクセルで人時の管理がなされており現在非常に複雑な構成になっています。基本的には出勤人数・応援人数・欠勤人数などを把握する為の表です。一度やってみます

hinata0915
質問者

補足

すいません。excel2003だからでしょうか?上記の式をB1にいれましたが「式が長すぎます」とエラーが出てしまいます。行き詰まってしまいました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

これは表の組み換えのタイプ(型)だと思うが、そのコーナーの熟練回答者ならいざ知らず、質問者のレベル(質問の仕方や、表の構成を作る前によく考えていない、初心者レベルと思う)難しいと思う。エクセルの関数は表の組み換えは苦手の分野(得意は計数の合計や件数のカウント)。まあ表設計を変えるか、あきらめてください。 こういうのはVBAででも出来るかどうかぐらい、難しい。 本件特有のデータの構成ルールに依存したものになるから。 経験がないと、VBAもこれらが出来るレベルになるのは時間がかかる。 例データ 月曜日 佐藤 高橋 黒田 9:00 佐藤 黒田 10:00 佐藤 高橋 黒田 11:00 佐藤 高橋 黒田 12:00 佐藤 黒田 火曜日 山田 田中 右田 黒田 9:00 山田 右田 黒田 10:00 山田 右田 黒田 11:00 山田 田中 黒田 12:00 山田 田中 ーーー 1つのやり方だが、 これをVBAで構成しなおして(分解して)、並べ替える VBAコードは省略する。 火曜日 9:00 右田 火曜日 10:00 右田 月曜日 10:00 高橋 月曜日 11:00 高橋 火曜日 9:00 黒田 火曜日 10:00 黒田 火曜日 11:00 黒田 月曜日 9:00 黒田 月曜日 10:00 黒田 月曜日 11:00 黒田 月曜日 12:00 黒田 月曜日 9:00 佐藤 月曜日 10:00 佐藤 月曜日 11:00 佐藤 月曜日 12:00 佐藤 火曜日 9:00 山田 火曜日 10:00 山田 火曜日 11:00 山田 火曜日 12:00 山田 火曜日 11:00 田中 火曜日 12:00 田中 ーーーーーーーーーーー このデータに基づいて希望の表を作ることになる。 VBAコードは省略する。

hinata0915
質問者

お礼

ありがとうございます。お察しのとおり表の構成を作る前から全く考えれてはおらず専任者も移動でコロコロ変わる事も重ねてかなりのツギハギExcelシートになっています。私も初心者でVBAレベルだろうな…という風にも思っておりました。しかし今から表の構成し直しとは目をふさぎたくなるデータ量なのでなんとか簡易でできないものか…と質問にいたりました。鋭いご指摘でビックリしました。ありがとうございます

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

最初にお示しの表は同じシート内に曜日を作って入力しているのでしょうか?それとも曜日ごとに別のシートに入力しているのでしょうか?元のデータがあるシートの内容を具体的に教えてください。

hinata0915
質問者

お礼

色々お時間割いて頂きありがとうございました。結局解決には至っておりませんがまた、自身で学習し質問の仕方も学びます。

関連するQ&A

  • エクセルでこういうときは・・・?

    book1は   A B 1 1-1 山田 2 1-2 田中 3 1-1 佐藤 4 1-2 加藤 5 1-3 高橋 6 1-2 武田 7 1-3 岡田 と、なっております。この表から book2で 1-1 1-2 1-3 山田 田中 高橋 佐藤 田中 高橋 佐藤 加藤 高橋 #N/A 加藤 高橋 #N/A 武田 高橋 #N/A 武田 岡田 #N/A #N/A 岡田 と、いう表を作りたいのです。が、ご覧のとおりうまくいっておりません。(>_<) 上の表の検索はVLOOKを使っています。 なにかよい方法を教えてください。お願いします。

  • Excelについ教えてください!

    会社で、アルバイトの勤務時間を処理しなくてはなりません。 下記のようなexcelのファイルが1か月単位であがってきます。    A   B   C   D 1  4/10 山田 16:00 退勤 2  4/10 佐藤 14:00 出勤 3  4/10 田中 14:00 退勤 4  4/10 山田 12:00 出勤 5  4/10 田中 9:00 出勤 6  4/9 田中 16:00 退勤 7  4/9 佐藤 15:00 退勤 これを、   A   B   C   D 1    出勤 退勤 2 4/9 ●● ●● 3 4/10 ●● ●● 4 4/11●● ●●     このように別シートに個人毎に日報として抽出したいのですが、うまくいきません。 vlookupだと一つの条件しか指定できませんよね・・・? 例えば、4/10の、且つ、山田の、且つ”出勤”の時間を(B3に)絞り出すなんてことはexcelの関数ではできないのでしょうか? よろしくお願いします。

  • エクセル関数の式

    sheet1       A   B    C     D    E    F   1    2008  6月 2 3    日付   1     2     3     4    5       4    曜日   sun    mon    Tue    wed 5山田太郎   出勤  出勤  欠勤 6山田次郎   出勤  欠勤  出勤 ・ ・ 22山田一郎   出勤 欠勤  出勤 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ B1の月を変えると曜日も変わります(日付は固定です)B5、6等の 出勤・欠勤はリスト表示から選択して入力しています。 sheet3    A  B C D E F G H I J K L M N 33  日    月   火    水    木    金    土 34   1    2   3    4   5    6   7 35   8    9   10   11   12   13   14 36  15   16   17   18   19   20   21 以下省略  行は33行目から始まっています ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 曜日は固定でsheet1の月を変えると日にちの位置が月ごとに変わります 日月火水木金土の間に空白のセルがあります(B列D列、FHJL列) この日にちの隣の空白セルにsheet1の出勤・欠勤などを各日にち事に表示したいです 上記のカレンダーには一人分の出欠を表示したいです(同じカレンダーが人数分あります) 月ごとにsheet3の日にちの位置がずれてしまうので、うまく表示出来ません。 いい方法はないでしょうか?よろしくお願いします。

  • データを別シートに抽出してリアルタイムで表示させたい

    いろいろ調べてみたのですが、どのようにすればいいのかわからなかったので質問させていただきます。 Excel 2003において、下記のシート1のデータをシート2~4に曜日ごとに抽出したいと思っています。 その際、シート1に追加したら自動でシート2~4に反映されるようにもしたいと思っていますが、どのようにしたらよいでしょうか? Excelが詳しくない者が扱うことが多いので、できればマクロは使わず、関数でできたらいいと思っているのですが、最悪マクロを使った方法でも構いませんのでご教授いただければ幸いです。 【シート1】   a  b   c   d   e      f 1 月  火  水  名前  生年月日  年齢 2 ○        佐藤  1980/1/1  29 3    ○     田中  1981/1/1  28 4 ○     ○  山田  1982/1/1  27 【シート2】(月曜に○のついている人の名前と年齢を表示)   a   b   1 名前 年齢 2 佐藤 29 3 山田 27 【シート3】(火曜に○のついている人の名前と年齢を表示)   a   b   1 名前 年齢 2 田中 28 【シート4】(水曜に○のついている人の名前と年齢を表示)   a   b   1 名前 年齢 2 山田 27

  • EXCELでの月別 日別の勤務表同時作成について

    現在、EXCEL2007にて、シート1には月別のシフト表を年と月を変えると自動でその月の日にち、曜日も変わるように作成しております。縦軸には氏名、横軸には日にち、曜日を並べており、縦に各人の出勤、退社を記入させるように作成しております。このシート1をもとに、別シートで日にちを選ぶと、その日に入っている氏名と勤務時間をガントチャート形式(時間帯別)で、自動的に表示作成できるようにしたいのですが、関数がわからず、現在、苦戦しております。 どなたか、月別勤務表から、その月のある日にひ分だけを抽出し、その日に入っている者のシフト時間を表示できるようにするための方法を教えていただけないでしょうか? シート1のサンプル  ××××年××月          1日 2日 3日 4日・・・・          月  火  水  木・・・・・    A君 出勤  9:00     退社 12:00 B君 出勤  10:00     退社  19:00 上記のような表で、たとえば、1日(月)にシフトに入っている者だけを抽出し、別シートで 日別のガントチャートを作成したいです

  • エクセルの関数の質問です。2

    質問がわかりにくくて申し訳ございませんでした。 実は従業員の勤務時間の管理表を作成しているのですが、 シートの右側には出勤時間と退勤時間が入力してあります。 すると、予め設定されてある左側の時間帯の表に勤務時間が出る ようにしたいのです。 【時間】 7/8/9/10/11/12/13/14/15/16/17/18 ※「7」は7-8の労働時間の意 田中さん □□1 ■ ■ ■ ■ ■ ■ 1 □ □ 右側には「9」「17」と入力 佐藤さん □□□ □ □ 1 ■ ■ 1 □ □ □ 右側には「12」「16」と入力 業務開始時間帯と終了時間帯を表す関数が既に□■のセルには入っています。 □は空白もしくは「ゼロ」、■には「1」を返したいと思っています。 別に集計表を作っても良いので、何か方法はないでしょうか?  

  • 【EXCEL関数】違うシートに抽出結果を出したい

    一覧表から「○」の条件が付いたデータのみを別シートに関数で抽出したいです。 フィルタではなく関数を使用したいのは、抽出したデータから名前の定義を使用して リスト表示をさせたいためです。ご教示のほど、宜しくお願いします。 シート1は一覧表となっており、A列に「○」のついたデータのみをシート2に表示 シート1(一覧表)   A  B 1  ○  山田太郎 2  ×  佐藤次郎 3  ○  高橋三郎 4  ×  鈴木四郎 5  ×  中村五郎 シート2(抽出結果を表示させる)   A  B 1  ○  山田太郎 2  ○  高橋三郎 3  4  5 フィルタオプション、当方の考え得る限りの配列関数等、色々試しましたが、 不勉強のために上手く結果が表示されませんでした。 ご教示のほど、宜しくお願い致します。

  • 関数で困ってます

    時間割を早く作りたいのですが、このような場合はどうしたらいいのでしょうか? 例 シート1は     1    2   3  田中1-1 1-2 1-3 伊藤1-2 1-3 1-4  山田1-3 1-4 1-1 鈴木1-4 1-1 1-2 シート2に      1  2  3 1-1 田中 伊藤 山田 1-2 伊藤 山田 鈴木 1-3 山田 鈴木 田中 1-4 鈴木 田中 伊藤 シート2の氏名のところがシート1を元に検索できないでしょうか? 誰かたすけてくれませんか?

  • エクセルでタイムカードを入力しての勤怠管理 関数&マクロ 

    本を購入して読んでみたのですが、よくわからなかったので教えて下さい。 定時は9:00-18:00です。  1.次の場合どのような関数をいれればいいでしょうか?   出勤時間(C6)を 退出時間(E6)へ入力    7:00に出社しても9:00からしかカウントしません。   9:05までなら遅刻とせず、9:00出社としてカウント 9:05を過ぎると30分単位で時間をカウント(9:06出勤なら9:30から) 2.パートさんが曜日によって勤務時間が変わります。その場合どのよう   に関数をいれればいいでしょうか?   月・水・金 9:00-18:00    火・木 8:00-17:00    曜日によって1.の質問の9:00からのカウントを、8:00からのカウント   というような選択をしたい場合 3.次の場合のマクロをどのように作成すればいいでしょう。   (今回はじめてマクロに挑戦します。そもそも根本的な考え方が    おかしいかもしれません。ご指導よろしくお願いします。)     1名(タイムカード1枚)で1シート 社員30名の1カ月分を    1ファイルで管理しようと思います。   A.マクロ用のシートにタイムカードの管理期間、たとえば11/1-30すると     以下が自動的に入力されるマクロ    ・全社員の勤怠表の日付(A6):(A35)まで自動的に日付が入力(A36)     は空欄表示    ・全社員の勤怠表の曜日(B6):(B35)まで自動的に日付が入力(B36)     は空欄表示   B.マクロ用のシートにあるクリアボタンを押すと以下がデータクリアされる     マクロ     ・全社員の勤怠表の出勤時間(C6):(C36)と退社時間(E6):(E36)が 自動的にデータ削除される。 質問が分かりづらいとは思いますがよろしくお願いします。

  • 曜日別に出勤を管理したい

    1ヶ月事の出勤表を作成したいのですが、 月水金or火木土 などの曜日で出勤する人がいます。 その曜日に出勤していれば 勤務した時間 例)6 などを表示したいです。          月 火 水 木 金 土 名前A 月水金 6    6    6  月曜日出勤なので 6 という条件をしたいです。 上記でわかっていただけるかがわかりませんが・・・宜しくお願いします。

専門家に質問してみよう