dポイントプレゼントキャンペーン実施中!

二つのシートに、個人のデータが入っています。
二つのシートの両方に入力されている人もいれば、片方にしか入力されてない人もいます。

この二つのシートのデータから、一つの、全員のデータの入ったシートを作りたいのですが、何か良いやり方はないでしょうか?
もちろん、両方に入力されている人は、一つのデータです。

また、項目も片方にしかない項目と、両方にある項目があります。

数が多いため、手入力だと時間がかかってしまいますので・・・
文だと説明しにくいので、図を書いてみます。

シート1
所属 氏名 雇用形態    11月            12月   
            申告 未申告 クレーム  申告 未申告 クレーム 
 鈴木   正      0   0  0      1   2    0
1機 高田   正    0   0  0      0   1   0
1機 内山   リ    0   1  0      0   1   0
2機 山口   正    0   0  0      0   1   0

シート2
所属 氏名 雇用形態    1月            2月   
            申告 未申告 クレーム  申告 未申告 クレーム 
1機 鈴木   正    0   0   0     1   2     0
1機 岡田   正    0   0  0      1   1     1
1機 高田   正    0   0  0     0   1     0
1機 内山   正    0   1  0     0   1     0
2機 芹沢   リ    0   0  0     0   1     0


これを
シート3
所属 氏名 雇用形態 申告 未申告 クレーム 合計
1機 鈴木   正   1    4    0     5
1機 岡田   正   1    1    1     3    
1機 高田   正    0   2    0     2     
1機 内山   正    0   4    0     4 
2機 芹沢   リ    0   1    0     1
2機 山口   正   0    1    0     1

としたいので、『データの統合』機能は試してみたのですが、数字じゃないと、うまくいかないようだったので・・

すみませんが、宜しくお願いします。
また、長い文、読んでくれてありがとうございます。

A 回答 (1件)

マクロないと難しいと思います。


急ぎと書いてあるので、一応マクロの一案です。

結果ですが
所属 氏名 雇用形態 申告 未申告 クレーム 合計
1機 鈴木   正   1    4    0     5
ではなく
1機 鈴木   正   2    4    0     6
だと思います。

Sub Sample()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim max1 As Long, max2 As Long
Dim i As Long, j As Long
Dim kei(3) As Variant
Dim k As Integer
Dim wkey As String
Application.ScreenUpdating = False
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
Set sh3 = Worksheets("Sheet3")
max1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row
max2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
j = 1
With sh3
'作業列を作成
sh1.Range("A3:I" & max1).Copy Destination:=.Range("H1")
sh2.Range("A3:I" & max2).Copy Destination:=.Range("H" & max1 - 1)
.Range("H1:P" & max1 + max2 - 4).Sort Key1:=Range("H1"), Order1:=xlAscending, _
Key2:=Range("J1"), order2:=xlAscending, Key3:=Range("I1"), order3:=xlAscending
'
wkey = .Range("H1").Value & "," & .Range("I1").Value
kei(0) = .Range("J1").Value
For i = 1 To max1 + max2 - 4
If .Range("H" & i).Value & "," & .Range("I" & i).Value <> wkey Then
j = j + 1
.Range("A" & j).Value = Left(wkey, InStr(wkey, ",") - 1)
.Range("B" & j).Value = Mid(wkey, InStr(wkey, ",") + 1, Len(wkey) - InStr(wkey, ","))
For k = 0 To 3
.Cells(j, k + 3).Value = kei(k)
Next k
.Range("G" & j).Value = kei(1) + kei(2) + kei(3)
wkey = .Range("H" & i).Value & "," & .Range("I" & i).Value
kei(0) = .Range("J" & i).Value
For k = 1 To 3
kei(k) = 0
Next k
End If
For k = 1 To 3
kei(k) = kei(k) + .Cells(i, k + 10).Value + .Cells(i, k + 13).Value
Next k
Next i
'最後のデータ
j = j + 1
.Range("A" & j).Value = Left(wkey, InStr(wkey, ",") - 1)
.Range("B" & j).Value = Mid(wkey, InStr(wkey, ",") + 1, Len(wkey) - InStr(wkey, ","))
For k = 0 To 3
.Cells(j, k + 3).Value = kei(k)
Next k
.Range("G" & j).Value = kei(1) + kei(2) + kei(3)
'作業列クリア
.Range("H1:P" & max1 + max2 - 4).ClearContents
End With
Application.ScreenUpdating = True
sh3.Select
End Sub
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!