• ベストアンサー

異なったエクセルデータの表を合体するには?

アルバイトの勤怠管理をするのに専用のシステムから3ヶ月毎にしか取り出せないエクセルデータがあります。 それを6ヶ月にまとめたいのですが、3ヶ月ごとに人員が入れ替わり、人数も名前の順にもずれが出てきます。 それをどの様に纏めたら良いのか思考錯誤しております。 例(名前は仮名です) <4月~6月のリスト> A列      B列 1.あいざわ  110 2.いとう    80    3.こやま    15  4.さいとう   30  5.やまだ    10 <7月~9月のリスト> A列(氏名)  B列(時間) 1.あいざわ   80 2.こやま    25    3.さいとう   10  4.やまだ    30 5.やまもと   10  6.わたなべ   20 上記のような3ヶ月毎のデータの件数が約2000~3000人分、 人数も順序もバラバラで出てきます。 これを、半年ずつ一つのデータに纏めるにはどのような方法がありますでしょうか。 当方、名前を昇順にし、あとは二つの表を見比べて手入力もしくはコピー&ペーストを自力でやる方法しか思いつきません。 説明が下手で申し訳ございませんが、ご教示いただけますと幸いです。 宜しくお願いいたします。

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

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

「統合」機能利用が良さそうです。 しかし、別の集計で屋ってみます。 (1)4-6月の最終行の下に7-9データを貼り付け(手作業) (2)氏名でソート (3)例データでの結果 氏名 データ あいざわ 110 あいざわ 80 いとう 80 こやま 15 こやま 25 さいとう 30 さいとう 10 やまだ 10 やまだ 30 やまもと 10 わたなべ 20 ーー (4)データー集計 グループの基準 氏名 集計の方法  合計 集計するフィールド データ ーー 氏名 データ あいざわ 110 あいざわ 80 あいざわ 合計 190 いとう 80 いとう 合計 80 こやま 15 こやま 25 こやま 合計 40 さいとう 30 さいとう 10 さいとう 合計 40 やまだ 10 やまだ 30 やまだ 合計 40 やまもと 10 やまもと 合計 10 わたなべ 20 わたなべ 合計 20 総計 420 ーーー 第2レベルを選択 氏名 データ あいざわ 合計 190 いとう 合計 80 こやま 合計 40 さいとう 合計 40 やまだ 合計 40 やまもと 合計 10 わたなべ 合計 20 総計 420 ーーー 編集ージャンプーセル選択ー可視セル コピーし他シートに貼り付け ーー 結果 上記 ーー 「合計」が付いているのを消すために、A列で「合計」を「空白」に置換。 === VBAでも(1)(2)を済ました後のデータを対象にすると、コードが簡単になる。1つ下を見て同じ氏名ならデータを足して書き出す。 1つ下が別人ならその行を書き出す。

keitybmc
質問者

お礼

imogasi様 色々とご丁寧にお教えいただきまして、本当にありがとうございました。 途中まで挑戦してみましたが、私の説明の仕方が悪くいったん断念する事にいたしました。 初心者の私にもわかりやすいご説明をしてくださり、ありがとうございました。

keitybmc
質問者

補足

お教えいただきまして、ありがとうございます。 難しいことがわからず、imogasi様のご意見を参考にトライしてみました。 私の説明が悪かったようで、途中で違いに気が付きましたので恐縮ながら再度質問を変更させていただきます。 時間数の合計を出すのではなく、3ヶ月毎のリストを氏名もしくはID順に横並びにしたいです。 現在、 <4月~6月のシート> A列(ID)B列(氏名)C列(4月普通)D列(4月深夜)E列(4月土日)F列(4月合計)G列(5月普通)H列(5月深夜)I列(5月土日)J列(5月合計)K列(6月普通)L列(6月深夜)M列(6月土日)N列(6月合計) <7月~9月のシート> A列(ID)B列(氏名)C列(7月普通)D列(7月深夜)E列(7月土日)F列(7月合計)G列(8月普通)H列(8月深夜)I列(8月土日)J列(8月合計)K列(9月普通)L列(9月深夜)M列(9月土日)N列(9月合計) と二つのシートに分かれているものを、 A列(ID)B列(氏名)C列(4月普通)D列(4月深夜)E列(4月土日)F列(4月合計)G列(5月普通)H列(5月深夜)I列(5月土日)J列(5月合計)K列(6月普通)L列(6月深夜)M列(6月土日)N列(6月合計)O列(7月普通)P列(7月深夜)Q列(7月土日)R列(7月合計)S列(8月普通)T列(8月深夜)U列(8月土日)V列(8月合計)W列(9月普通)X列(9月深夜)Y列(9月土日)Z列(9月合計) このように、名前、IDなどの同一の情報はそのまま一行に、<4月~6月のシート>へ<7月~9月のシート>のC列(7月普通)以降の情報を、<4月~6月のシート>のN列(6月合計)以降の行へ並べたいと思います。 大変ご面倒をおかけしてしまい、説明も下手で申しわけございませんが、是非アドバイスをいただけますと大変有り難く存じます。 勝手申し上げまして恐縮ですが、何卒宜しくお願いいたします。

その他の回答 (6)

  • hayasi456
  • ベストアンサー率40% (2402/5878)
回答No.6

専用のシステムを作った方やエクセルが得意な方にに作ってもらう方が楽ですよ。 N02mshr1962さんの「統合」良さそうですね。 もうちょっと簡単で手間の掛かる方法を まず確認を A列  B列  C列 (No) (氏名)(時間) 1. あいざわ 80 2. こやま   25    3. さいとう  10  4. やまだ  30 ではないですか? そうでないと他の方の方法も難しいそうです。 上記のようならば <7月~9月のリスト>のC列(時間)をD列に移し <4月~6月のリスト>の下にをコピーして貼り付けます。 名前を昇順にして並び替え 4月~6月 7月~9月 両期間記載されている人は手作業でまとめます。 (E列に合計)多少は楽になると思います。 A列(氏名)  B列(時間) 1.あいざわ   80 2.こやま    25    3.さいとう   10  4.やまだ    30 5.やまもと   10  6.わたなべ   20 ならば専用のシステムを作った方に頼んだ方が良いでしょう。

keitybmc
質問者

お礼

hayasi456様 エクセルが詳しい者がおらず、この度質問をさせていただきました。 お忙しい中、ご意見をいただきましてありがとうございます。

  • come2
  • ベストアンサー率32% (594/1811)
回答No.5

No1です。補足ないですが データを仮にこのように加工するとします 名前 月数 時間 あいざわ 4 10 いとう 4 10 こやま 4 10 あいざわ 5 20 いとう 5 20 さいとう 5 20 4から5月にかけて あいざわ、いとうはそのまま在籍 こやまは4月のみ さいとうは5月から これをピボットテーブルを利用すると表になります

回答No.4

すでに他の方のやりかたで回答が出ていますが…。 VBAを使用した方法だと以下です。 A列に名前 B列に数字 が入っているとします。 新しいブックを作り、 Sheet1に<4月~6月のリスト>を貼り付けます。 Sheet2に<7月~9月のリスト>を貼り付けます。 Sheet3を選択し、ツール(T)→マクロ(M)→VisualBasicEditorをクリックします。 MicrosoftVisualBasicというウィンドウが立ち上がったら、左のウィンドウのSheet3をダブルクリックします。右側に真っ白な画面が現れます。 そこに以下をペーストします。 --------↓ここからコピーしてペースト---------------------- Private Sub 結合() On Error GoTo Err_Handler: Dim i As Long, j As Long, k As Long Dim i_max As Long, j_max As Long Dim flg As Boolean 'Sheet1の最大行 i_max = 999 'Sheet2の最大行 j_max = 999 k = j_max 'Sheet1をSheet3へコピーする Sheets("Sheet1").Select Sheets("Sheet1").Range("A1:B" & i_max).Select Selection.Copy Sheets("Sheet3").Select Sheets("Sheet3").Range("A1:B" & i_max).Select ActiveSheet.Paste For j = 1 To j_max DoEvents flg = False '同一名前の行を見つけてC列へ書き込む For i = 1 To i_max If Sheets("Sheet3").Range("A" & i).Cells = Sheets("Sheet2").Range("A" & j).Cells Then Sheets("Sheet3").Range("C" & i).Cells = Sheets("Sheet2").Range("B" & j).Cells flg = True Exit For End If Next i If Not flg Then '同一行が無かった場合は追加 k = k + 1 Sheets("Sheet3").Range("A" & k).Cells = Sheets("Sheet2").Range("A" & j).Cells Sheets("Sheet3").Range("B" & k).Cells = "0" Sheets("Sheet3").Range("C" & k).Cells = Sheets("Sheet2").Range("B" & j).Cells End If Next j 'D列の計算式とC列の数値以外を0に For i = 1 To k If Not IsNumeric(Sheets("Sheet3").Range("C" & i).Cells) Then Sheets("Sheet3").Range("C" & i).Cells = "0" Sheets("Sheet3").Range("D" & i).Cells = "=B" & i & "+C" & i Next i Sheets("Sheet3").Range("A1").Select msgbox "終わり" Exit Sub Err_Handler: MsgBox Err & "." & Err.Description Err.Clear End Sub ----↑ここまで-------------------------------------------- 貼り付けた内部の 'Sheet1の最大行 i_max=999 と 'Sheet2の最大行 j_max=999 の999という数字を実際のSheet1の最終行とSheet2の最終行の数字に変えます。 キーボードの『F5』を1回押します。 行数により時間がかかりますが、「終わり」と表示されたら完了です。 MicrosoftVisualBasicを×で閉じます。 Sheet3のB列にはSheet1の数値、C列にはSheet2の数値、D列にはその足し算が入ります。

keitybmc
質問者

お礼

hosohoso13様 大変詳細にお教えいただきまして、本当にありがとうございます。 私の質問が良くなく、結果お手間をとらせてしまい申し訳なく思います。 ご迷惑を承知のうえですが、また何かありましたら宜しくお願いいたします。

回答No.3

まず、名前の欄は「通し番号+"."+名前」なのでしょうか? 通し番号が無い、名前だけなら比較的簡単です。 以下、その前提での説明です。 まず、新しいシートに、4~6月のデータをコピーします。(例としてA列とB列)次に、7~9月のデータをコピーします(例としてC・D列)。 適当なセル(例としてE1)に下記の式を入力して、「Shift」を押しながら「Ctrl」を押しながら「Enter」を押して式を確定して下さい。 =SUM(IF(A$1:A$2000=C1,B$1:B$2000,0)) 式の欄に{=SUM(IF(A$1:A$2000=C1,B$1:B$2000,0))} と表示されていればOKです。 このセルの右下をつまんで、下まで伸ばして(オートフィル)下さい。 これで、両方に名前がある場合のデータは二つ並んだ形になります。 このままではA列にデータがあってC列にデータが無い場合が拾えないので、その先はご自身で工夫してみて下さい。 ヒントとしては、あらかじめ名前を結合して、重複したものを削除した列を作っておいて、その列を先ほどの式のどこかにすり変えれば・・・。

keitybmc
質問者

お礼

shironekoxxx様 質問の仕方がうまくいかず、大変ご迷惑をおかけしてしましました。 ご丁寧にお教えいただきまして、ありがとうございました。 また何かありましたら、宜しくお願いいたします。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

1行目に氏名、時間などの項目名がある場合は 「データ」「統合」や「データ」「ピボットテーブル」で 数値を合算したり、集計したり出来ます。 「データ」「統合」 http://kokoro.kir.jp/excel/tougou.html 「データ」「ピボットテーブル」 http://www11.plala.or.jp/koma_Excel/contents6/mame6040/mame604001.html

keitybmc
質問者

お礼

mshr1962様 ご参考URLをお教えいただきまして、ありがとうございます。 今後のためにも役立てるかと思います。

  • come2
  • ベストアンサー率32% (594/1811)
回答No.1

こんにちは 補足説明お願いします こういうシステムの場合、名前とは別に個人個人に登録された 「社員番号」みたいなのがあって、それは人が入れ替わっても 別の人に使わないみたいなものがあるんですが そういうのはデータといっしょに取り出せないですか? システムでは「ユニークID」とか呼ばれるものです

keitybmc
質問者

お礼

come2様 このたびはすぐに補足をご連絡できず申し訳ございませんでした。 また機会がありましたら是非アドバイスをいただけますと幸いです。 ありがとうございました。

keitybmc
質問者

補足

こんばんは。 ご連絡が遅くなり申し訳ございません。 おっしゃる通り、個人に社員番号のような8桁のIDがつきます。 例を少々変更します。 例(名前は仮名です) <4月~6月のリスト> A列(ID)B列(氏名)C列(普通)D列(深夜)E列(土日)F列(合計) 1000001 あいざわ   110     0    0     110 2000005 いとう     80     10    5      95 1000783 こやま     15     20    10      45 0056873 さいとう    30     5    30      65 5200146 やまだ     10     30    15 55 <7月~9月のリスト> 列(ID)B列(氏名)C列(普通)D列(深夜)E列(土日)F列(合計) 1000001  あいざわ    80   0    5     85 1000783  こやま     15   20    10     45 0056873  さいとう    30   5    30     65 5200146  やまだ     10   30    15     55 1000392  やまもと    80   10    5     95 8026900  わたなべ    15   0    0     15      実際にはこのような細かいデータを全て合算させなければいけません。 IDは、他の人には繰り返し使用せず、使い捨てになります。 宜しくお願いいたします。

関連するQ&A

  • 別シートのエクセルデータを横並びに統合する方法

    前回も質問をさせていただき大変恐縮なのですが、私の質問の仕方が悪く、再度改めさせていただきたく存じます。 アルバイトの勤怠管理をするのに専用のシステムから3ヶ月毎にしか取り出せないエクセルデータがあります。 それを6ヶ月にまとめたいのですが、3ヶ月ごとに人員が入れ替わり、人数も名前の順にもずれが出てきます。 纏め方は、時間数の合計を出すのではなく、3ヶ月毎のリストを氏名もしくはID順に1列に横並びにしたいです。 例えば、 <4月~6月のリスト> A列(ID)B列(氏名)C列(普通)D列(深夜)E列(土日)F列(合計) 1000001 あいざわ   110     0    0     110 2000005 いとう     80     10    5      95 1000783 こやま     15     20    10      45 <7月~9月のリスト> 列(ID)B列(氏名)C列(普通)D列(深夜)E列(土日)F列(合計) 1000001  あいざわ    80   0    5     85 1000783  こやま     15   20    10     45 0056873  さいとう    30   5    30     65 これを合体させ、IDもしくは名前で並べ替えすると A列(ID)B列(氏名)C列(普通)D列(深夜)E列(土日)F列(合計) 1000001 あいざわ   110    0    0     110 1000001 あいざわ    80    0    5     85 2000005 いとう     80    10    5     95 1000783 こやま     15    20    10     45 1000783 こやま     15    20    10     45 0056873 さいとう    30    5    30     65 ↑このようになります。 これを、「あいざわ」のみで説明すると A列(ID)B列(氏名)C列(普通)D列(深夜)E列(土日)F列(合計)G列(普通)H列(深夜)I列(土日)J列(合計) ↑名前・IDはそのままで数値の入っているところのみを横並びにしたいです。 もう少し細かくご説明すると、実際は下のような名前・ID・数値の並びになっています。 <4月~6月のシート> A列(ID)B列(氏名)C列(4月普通)D列(4月深夜)E列(4月土日)F列(4月合計)G列(5月普通)H列(5月深夜)I列(5月土日)J列(5月合計)K列(6月普通)L列(6月深夜)M列(6月土日)N列(6月合計) <7月~9月のシート> A列(ID)B列(氏名)C列(7月普通)D列(7月深夜)E列(7月土日)F列(7月合計)G列(8月普通)H列(8月深夜)I列(8月土日)J列(8月合計)K列(9月普通)L列(9月深夜)M列(9月土日)N列(9月合計) と二つのシートに分かれているものを、 A列(ID)B列(氏名)C列(4月普通)D列(4月深夜)E列(4月土日)F列(4月合計)G列(5月普通)H列(5月深夜)I列(5月土日)J列(5月合計)K列(6月普通)L列(6月深夜)M列(6月土日)N列(6月合計)O列(7月普通)P列(7月深夜)Q列(7月土日)R列(7月合計)S列(8月普通)T列(8月深夜)U列(8月土日)V列(8月合計)W列(9月普通)X列(9月深夜)Y列(9月土日)Z列(9月合計) このように、名前、IDなどの同一の情報はそのまま1行に、<4月~6月のシート>へ<7月~9月のシート>のC列(7月普通)以降の情報を、<4月~6月のシート>のN列(6月合計)以降の列へ並べたいと思います。 お手数をおかけしてしまう質問で大変申し訳ございませんが、どなたかアドバイスをご教示いただけますと、大変有り難く存じます。 どうぞ宜しくお願いいたします。

  • Excelでデータの並べ替えについて

    例えば、A1からA10まで名前がランダムに入力されているとします。 そのデータを昇順に並べ替えた状態でB1からB10まで表示させる方法はありませんでしょうか? A列のデータが変更されるとB列に反映されるようにしたいのですが。

  • エクセルのデータ並び替えについて教えてください。

    エクセルのデータ並び替えについて教えてください。 セブン エクセル2007 です、初心者ですよろしくおねがいします。 1行目に表題(○○会名簿)と入力 A列とB列を結合して中央揃えしました。 2行目にA例は名前 B列は住所と入力 3行目からは上記に添い名前、住所と入力してから、数行を過ぎたところで 名前のA列昇順にデータを並びかえようとしたら、1行と2行目も混ざり並び替えられました。 3行目以下を並び替えすることはできないのでしょうか? 方法を教えてくださいませ

  • エクセルのデータから一致するデータを出したい

    エクセルの表から一致するデータに対応する指定列のデータを表示させたいのですがどの関数で設定すればよいのか教えて下さい。 A2からDの30までの表(実際には4000列以上) 1行は見出し A列は1~のナンバリング B列は商品コード(同じコードが複数ある)    ・昇順に並べてある C列は日付け    ・2番目に優先で昇順に D列は文字列 探したい商品コードをB1入力、それに対応するD列の文字列の昇順のトップをD1に表示させたい この内容で伝わるでしょうか オートフィルターで選ぶのも考えたのですが、入力した時その列のある列のデータが瞬時に見たいのです。 よろしくお願いします。

  • EXCELの表から飛び飛びにデータを抜き出したい

    A列に日付 B列にA列日付の株価 C列に日付(1週間おき) D列にC列の日付の株価をB列から抜き出して、1週間おきの株価のリストをつくりたいと考えています。(行削除を手作業で繰り返せば良いようにも思えるのですが、10年分のデータがあるため、途方もない作業量になってしまいます…) この場合、D列にはどのような数式を入力したら良いのでしょうか? なにとぞよろしくお願い申し上げます m(_ _;)m

  • エクセルのデータ処理についてアドバイス下さいませ

    A列に不規則なデータの並びがあり(昇順) そのデータが変わるごとにB列に数値を1づつ 増やしていきたいのですが、どのような手順(関数?)を 使用すれば良いのか判りません。 よろしくお願いいたします。excelを使用しています A列 B列 101 1 101 101 103 2 105 3 105 106 4 107 ? 107 107 110 ? 110 110 110

  • エクセルで複数列のデータをまとめる方法

    あまりエクセル詳しくないので教えて下さい>< 下記のようなデータを一覧にまとめたいです! 列A   列B    列D  列E   列G   列H 名前  英語  名前   数学  名前  国語 A    98    J     98    ZZ   98 B    96    K     97    K    97 J    92    B     97    B    95 :    :     :     :     :    : なぜか各列にデータが分かれていて、各4、5万人分のデータがバラバラの列になっているので、 列A  列B  列D  ・・・ 名前  国語  数学・・・ A    97   98・・・ B    98   76・・・ 上記のように纏めたいです! ただ、名前順にソートしても教科別に受験人数や受験者が違ったりするので… 何か効率的な方法はないでしょうか? ご教授頂けると嬉しいです。 宜しくお願い致します!

  • EXCELで別のシートのデータを参照して返す方法

    ちょっとしたことなのですが、うまく式が書けなくて悩んでいます。 作業用のシート1と参照用のシート2があり、 シート1のA列には  あおき  あべ  いぐち  いはら などと文字列(名前)が入力されています。 こちらは今度の野球のスタメンだと思ってください。 シート2にはA列とB列があって、 わたなべ 55 いぐち  43 あおやま 67 いはら  41 などと、名前:背番号が羅列されています。こちらが参照用の全選手の背番号リストだと思ってください。 ここで、 シート1のB列に、A列の名前に対応した背番号を返したいのです。 なので、シート1のB列に IF(シート1のA列の値=シート2のA列のいずれかの値)だったとき、 適合したシート2の行のB列の値を表示する という式を入れたいのですが、どのように式を書けばよいでしょうか。 すみませんがどなたか教えてください。

  • Excel VBAでデータを自動処理したい(2)

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか?どなたかお知恵をお貸しください。 別シートに参照リストと未完成リストがあります。参照リストのA列のデータの並びと未完成リストのA列の並びを同じくして、未完成リストを完成させます。参照リストのA列の並びはこんな風です。1 2 3 3 5 6 7 8 8 10 ・・・(データは昇順ですが必ずしも連番ではなく、同じデータが並ぶこともあります。) そして未完成リストの方は、1 2 3 4 5 7 8 10 ・・・といった風です。未完成リストのA列は1 2 3 3 4 5 7 8 8 10・・・という風にしたいのです。つまり参照リストにあっても、未完成リストにないデータは無視します。(上の例では、6です。)参照リストになくて、未完成リストにあるデータはそのまま残します。(上の例では、4です。)両方に共通のデータで参照リストのようにデータが重複しているときは、未完成リストの方に重複している分だけ行を挿入し、上のデータをコピーします。(上の例では、3と8です。)この処理を例えば、それぞれのA列を比較し、お互い共通していないデータ行をそれぞれのリスト上で不可視にし、そのあと、参照リストのA列のデータを参考に重複してるデータを見つけたら、未完成リストの方に重複している分だけ自動に行を挿入し、上のデータをコピーして、参照リストと未完成リストの共通のデータを同じならびにしたいのです。(このあと、参照リストのB,C,Dのデータを未完成リストにコピーするので、未完成リストにしかないA列のデータは、不可視にしておいて、B,C,Dのデータをコピーするときに行がずれないようにしたいのです。) 以上(1)、(2)の処理を自動にさせるためのVBAが分かる方がいらっしゃいましたら、是非ご教授お願いいたします。

  • Excelで表に任意データを入れたい

    いつもお世話になっています Excelで悩んでいるところがあるので、ご教授をお願いします。 ExcelにシートA,シートBを用意 シートAに表を作成しまして (例) | 名前  | 備考  | | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| この表は1ページで30行分の名前データが綺麗に収まる表です。 別シートBに百数件の名前だけのデータが入っています。 (A列に数十件、B列に数十件とデータは複数列にわたって入っています) ※今はこのデータの形式ですが、データの持ち方はある程度妥協できます シートBの任意の名前データだけ複数選択し、シートAの形を使って印刷をしたいと考えています。 この時、選択したデータ件数によってはシートAの表は複数枚に渡って印刷される必要があります。 これを実現したいのですが、どのようにすればよいでしょうか? マクロでやるのか、はたまたマクロを使わずともできるのか・・・ 差し込み印刷のような感じでできないかと調べてはいるのですが、解決できそうな情報がみつかりません。 これを実現できる方法を分かる方がいましたら、お願いします。 マクロでという場合は、VBAの記述は初心者ですのでポイントだけでも詳しく教えて頂けると嬉しいです。 よろしくお願いします。

専門家に質問してみよう