- ベストアンサー
Excelの出勤管理表を一つにまとめる方法
- Excelの出勤管理表について、勤務地ごとに分かれているシートをひとつにまとめたいです。関数を使用して作業用の列や行の挿入、シートの追加も可能です。
- 現状では、勤務地ごとにシートが分かれており、各シートには通勤可能なスタッフが記載されています。同じスタッフが複数のシートに載っている場合もあります。
- 希望するのは、勤務地ごとに分かれているシートをまとめて、全スタッフが記載された一つのシートを作成することです。別途作成したシートに、各スタッフの出勤情報を集約します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
3シートをまとめるなら、以下のような直列につないた関数がわかりよいと思います。 (シート4のB3セルに入力して右方向および下方向にオートフィルコピー) =IF(COUNTIF(Sheet1!$A:$A,$A3),INDEX(Sheet1!B:B,MATCH($A3,Sheet1!$A:$A,0)),"")&IF(COUNTIF(Sheet2!$A:$A,$A3),INDEX(Sheet2!B:B,MATCH($A3,Sheet2!$A:$A,0)),"")&IF(COUNTIF(Sheet3!$A:$A,$A3),INDEX(Sheet3!B:B,MATCH($A3,Sheet3!$A:$A,0)),"")
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
表の組み換えの問題だと思う。 各シートのデータ列の構成(並び順や有無)は同じなのだろうね。質問に長々と例を挙げているが、一番大切なことだ。 こういうのは関数では難しい。ひっぱって来るデータ数(行数)が各シートで一定ではないから。 (1)関数 (2)VBA (3)出来合いのソフト (4)手操作 (3)は見つけるのが難しいだろう。 (2)は経験は無いのだろう。 今回限りなら、手作業でコピペして、シートを集約するのが早い。毎月とかに、この作業を繰返すのか? この点も質問に書いておくことが大切だ。 (2)は職員の名簿が1セットあれば、その職員名でデータを抜き出す、抜き出し問題になるが、複数シートに、同一職員が現れると、対処が難しい。 結果は、既に回答が出ているような、長い関数式ならできるということだが、質問者は式の意味を理解できるかな。 ーーーー 言ったついでに、参考に、シートデータを集約する、VBAのコードを挙げてみる。 下記コードで仮定した点 ・Sheet4という名のシートにデータを集める ・第3行からが実質データとする。1,2行目は各シート共通の見出しとする。 ・データの右端の列はJ列と仮定(月中日付ならもっと多いが) 上記仮定は、1-数文字のコードを変えれば、簡単に変えられる。 ーーー Sub test02() '見出しのコピー Sheet1から Worksheets("Sheet1").Range("A1:j2").Copy Worksheets("Sheet4").Range("a1") '--各シートからデータを寄せ集め For Each sh In Worksheets '全(各)シートの繰り返し If sh.Name <> "Sheet4" Then '集約シート以外を対象にする d1 = sh.Range("A65536").End(xlUp).Row '各シートのデータ最下行を調べる 'MsgBox sh.Name & " " & d1 '--集約シートの最下行を調べる d2 = Worksheets("Sheet4").Range("A65536").End(xlUp).Row '--集約シートの最下行の次に貼り付け sh.Range("a3:J" & d1).Copy Worksheets("Sheet4").Range("a" & d2 + 1) End If Next End Sub この結果を、職員コードでソートすると職員別に記録データ行がまとまる。
お礼
的確なアドバイス、ありがとうございます。 お察しのとおり、VBAは使用したことがなく、いただいた内容を理解するには、まだまだ勉強不足です。 (他の方の関数は、理解できました!) これから少しずつ、VBAについても勉強していこうと思いました。 ありがとうございました!
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート4のB3セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$A:$A,$A3),INDEX(Sheet1!$A:$AX,MATCH($A3,Sheet1!$A:$A,0),MATCH(B$2,Sheet1!$2:$2,0)),"")&IF(COUNTIF(Sheet2!$A:$A,$A3),INDEX(Sheet2!$A:$AX,MATCH($A3,Sheet2!$A:$A,0),MATCH(B$2,Sheet2!$2:$2,0)),"")&IF(COUNTIF(Sheet3!$A:$A,$A3),INDEX(Sheet3!$A:$AX,MATCH($A3,Sheet3!$A:$A,0),MATCH(B$2,Sheet3!$2:$2,0)),"")
お礼
ありがとうございます。 こちらの回答も大変参考になりました。 INDEXの使用、まったく考えが及びませんでした。 お恥ずかしいです。 大変助かりました!
お礼
ありがとうございます!できました! matchを何かと組み合わせて使うんだろうな、と考えてはいたのですが、ぜんぜん考えが及びませんでした。 本当に助かりました。 皆さんの回答参考になったのですが、一番早くご回答いただいた、こちらをベストにさせていただきます。 ありがとうございました。