• 締切済み

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

前回も質問をさせていただき大変恐縮なのですが、私の質問の仕方が悪く、再度改めさせていただきたく存じます。 アルバイトの勤怠管理をするのに専用のシステムから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月合計)以降の列へ並べたいと思います。 お手数をおかけしてしまう質問で大変申し訳ございませんが、どなたかアドバイスをご教示いただけますと、大変有り難く存じます。 どうぞ宜しくお願いいたします。

みんなの回答

noname#192382
noname#192382
回答No.3

No1です。Microsoft Access Clubというサイトがあります。ここに投稿したらいかがですか。みんなが知恵を貸してくれると思います。

keitybmc
質問者

お礼

サイトをお教えいただきまして、ありがとうございます。 「アクセス」を使うのが良さそうです。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

とりあえず思いつく方法として (1)・2枚のシートからID、氏名のみ別シートに合体させ、重複の無いID、氏名を作成する。(フィルタ機能などで)   ・IDリストができれば、後は単純にVLOOKUP関数でそれぞれのシートを参照させればよいのでは。  (左半分がシート1の参照、右半分がシート2の参照で空白セルはブランクで返す式を入れればよい) (2)・ピボットテーブルの「複数のワークシートを参照」を利用してもできると思われます。   ・ピボットテーブルはまったくわかりませんが、試してみたところほぼそのものができました。    (時間部分のタイトルを別名にしておく必要があります)   ・氏名の値そのものを表示させる部分だけがうまくいきませんでした。(多分、できるのでは。) (3)マクロを利用(下例)   ・IDが一意で同じシート内ではダブっていないと仮定。   ・両シートともデータは2行目から始るとして、とりあえずご質問例の6項目(=2+4項目)で作成。   ・シート1に付加える形でシート2の内容を追加記入する形としている。 (match関数が使えないようなので、シコシコ照合させてます。) Sub test() Dim s1 As Worksheet, s2 As Worksheet Dim rng As Range, flag As Boolean Dim n1 As Long, nnew As Long, r As Long, r2 Const koumoku = 4 '//ID、氏名を除く項目数 Set s1 = Worksheets("Sheet1") '//4~6月シート名 Set s2 = Worksheets("sheet2") '//7~9月シート名 Set rng = s1.Cells(1, koumoku + 3).Resize(1, koumoku) n1 = s1.Cells(s1.Rows.Count, 1).End(xlUp).Row nnew = 0 For r = 2 To s2.Cells(s2.Rows.Count, 1).End(xlUp).Row  flag = True  For r2 = 2 To n1   If s1.Cells(r2, 1).Text = s2.Cells(r, 1).Text Then flag = False: Exit For  Next r2  If flag Then   nnew = nnew + 1   r2 = n1 + nnew   s1.Range("A1:B1").Offset(r2 - 1, 0).Value = s2.Range("A1:B1").Offset(r - 1, 0).Value  End If   rng.Offset(r2 - 1, 0).Value = s2.Cells(r, 3).Resize(1, koumoku).Value Next r End Sub

keitybmc
質問者

補足

fujillin様 ご連絡をいただきまして、ありがとうございます。 件数が2000件~3000件あり、 >2枚のシートからID、氏名のみ別シートに合体させ、重複の無いID、氏名を作成する。(フィルタ機能などで) ↑すでにこの作業でてこずっております。 当方、エクセルで通常の入力位は出来ますが、ほぼ初心者です・・・。

noname#192382
noname#192382
回答No.1

アクセスのユニオンクエリーを使えばできました。ただし私は素人、あくせす、エクセルは97であることをお断りしておきます。手順は 1.二つのテーブルをアクセスにインポート。シート1、シート2 2.氏名のフィールドをユニオンクエリーでまとめる。クエリー1 3.クエリー1をエクセルにエクスポートして、クエリー1.xls 4.それをアクセスにてーぶるとしてインポートして、クェリー1 5.アクセスでクェリー1、シート1、シート2の3つのテーブルの間で、氏名のフィールドについてリレーション。結合の種類はクエリー1側を全体とする。 6.クエリーでこの3つのテーブルを追加して実行すると、希望の表ができました。

keitybmc
質問者

補足

optimumsoup様 ご意見をいただき、また質問内容をお試しいただいたご様子で、大変恐縮です。 しかし、当方MS系ソフトは普段入力や簡単な作業くらいしか行っておらず、 >1.二つのテーブルをアクセスにインポート。シート1、シート2 ↑この段階でつまずいてしまいました。 インポートを選択すると 「000exlの情報にアクセルできません。ファイルが存在し、形式が正しいことを確認してください。」と出てしまいます・・・。 せっかくお教えいただいているのに先に進めず大変申し訳なく思います。

関連するQ&A