#3 のWendy02 です。
SUMPRODUCT という言葉で、加算されることだと分り、自分のコードの間違いに気がつきました。#3のコードは、ボツです。
この行の部分が修正されました。
Sh2.Cells(rnum, cnum).Value = Cells(i, 3).Value
↓
Sh2.Cells(rnum, cnum).Value = Sh2.Cells(rnum, cnum).Value + Cells(i, 3).Value
後は、Sh2 のデータ部分がクリアされます。
'===========================================
Sub testSample2()
Dim rnum As Long, cnum As Long, ct As Long, i As Long
Dim Sh2 As Worksheet
'----------------------------------
'設定
Set Sh2 = Worksheets("Sheet2")
'----------------------------------
'項目を入れる(不要の場合は、ここを抜く)
Sh2.Range("A2:A4").Value = WorksheetFunction.Transpose(Array("下水", "上水", "道路"))
Sh2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents
Worksheets("Sheet1").Select
Application.ScreenUpdating = False
For i = 2 To Range("A65536").End(xlUp).Row
On Error Resume Next
'人名を探す
cnum = WorksheetFunction.Match(Cells(i, 2).Value, Sh2.Rows(1), 0)
On Error GoTo 0
'ない場合
If cnum = 0 Then
ct = Sh2.Cells(1, 256).End(xlToLeft).Column + 1
Sh2.Cells(1, ct).Value = Cells(i, 2).Value
cnum = ct
Err.Clear
End If
rnum = WorksheetFunction.Match(Cells(i, 1).Value, Sh2.Range("A2:A4"), 0) + 1
Sh2.Cells(rnum, cnum).Value = Sh2.Cells(rnum, cnum).Value + Cells(i, 3).Value
cnum = 0: rnum = 0
Next i
With Sh2.Range("A1").CurrentRegion
.NumberFormatLocal = "0.0"
On Error Resume Next
'空いているところに、0を入れる
.SpecialCells(xlCellTypeBlanks).Value = 0
On Error GoTo 0
.Cells(1, 1).ClearContents
End With
Application.ScreenUpdating = True
End Sub
お礼
こういうマクロもあるんですね! できあがった表の完成度に、つい感心してしまいました。 マクロの内容に対して、理解するのにもう少し時間がかかりますが、いい勉強になりました。 ありがとうございました。