No.1.2です。
たびたびごめんなさい。
各地域ごとで男女別の合計が必要なのですね!
前回は単に総合計だけでしたので、無視して↓のコードにしてください。
今回もSheet3を作業用のSheetとして使用しています。
Sheet1のデータは2行目以降にあるとします。
Sub Sample2()
Dim i As Long, j As Long, k As Long, endRow As Long
Dim c As Range, myRange As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
endRow = wS1.Cells(Rows.Count, "A").End(xlUp).Row
wS2.Cells.Clear
With Worksheets("Sheet3")
wS1.Range("A:A").AdvancedFilter Action:=xlFilterInPlace, unique:=True
wS1.Range("A:A").SpecialCells(xlCellTypeVisible).Copy .Range("A1")
wS1.ShowAllData
wS1.Range("B1").Resize(, 6).Copy .Range("C1")
.Range("I1") = "合計"
.Range("A1").Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
For k = 2 To 14
.Cells(k, "B") = (k - 2) * 5 + 40
Next k
.Cells(15, "D") = "合計"
Set myRange = .Range("C2:H14")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
.Range("C1") = .Cells(i, "A")
wS1.Range("A1").AutoFilter field:=1, Criteria1:=.Cells(i, "A")
wS1.Range("A1").AutoFilter field:=2, Criteria1:="1"
.Range("C15") = .Cells(i, "A") & "男性"
Range(wS1.Cells(1, "A"), wS1.Cells(endRow, "G")).SpecialCells(xlCellTypeVisible).Copy .Range("J1")
For k = 2 To 14
Set c = .Range("L:L").Find(what:=.Cells(k, "B"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
.Cells(c.Row, "K").Resize(, 6).Copy .Cells(k, "C")
Else
.Cells(k, "C") = 1
.Cells(k, "D") = .Cells(k, "B")
End If
Next k
With .Range("I2:I14")
.Formula = "=SUM(E2:H2)"
.Value = .Value
End With
With .Range("E15:I15")
.Formula = "=SUM(E2:E14)"
.Value = .Value
End With
.Range("C1:I15").Copy wS2.Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Range("J1:P14").ClearContents
myRange.ClearContents
wS1.Range("A1").AutoFilter field:=1, Criteria1:=.Cells(i, "A")
wS1.Range("A1").AutoFilter field:=2, Criteria1:="2"
.Range("C15") = .Cells(i, "A") & "女性"
Range(wS1.Cells(1, "A"), wS1.Cells(endRow, "G")).SpecialCells(xlCellTypeVisible).Copy .Range("J1")
For k = 2 To 14
Set c = .Range("L:L").Find(what:=.Cells(k, "B"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
.Cells(c.Row, "K").Resize(, 6).Copy .Cells(k, "C")
Else
.Cells(k, "C") = 2
.Cells(k, "D") = .Cells(k, "B")
End If
Next k
With .Range("I2:I14")
.Formula = "=SUM(E2:H2)"
.Value = .Value
End With
With .Range("E15:I15")
.Formula = "=SUM(E2:E14)"
.Value = .Value
End With
.Range("C2:I15").Copy wS2.Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Range("J1:P14").ClearContents
myRange.ClearContents
Next i
wS1.AutoFilterMode = False
.Cells.Clear
End With
With wS2.Range("A:A")
.Replace what:=1, replacement:="男性", lookat:=xlWhole
.Replace what:=2, replacement:="女性", lookat:=xlWhole
End With
With wS2
.Rows(1).Delete
.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
.Columns.AutoFit
End With
Application.ScreenUpdating = True
wS2.Select
MsgBox "処理完了"
End Sub
※ すべての地域を羅列するようにしていますので、
時間を要すると思います。m(_ _)m
お礼
地域コードが選択できることに気づきませんでした(^_^;)スミマセン…ちょっと手間ですが、形式を指定して貼付で「値だけ」にして地道に表をレイアウトしていきたいと思います。ちょっと急ぎなので、この回答が今の私に一番良さそうです。発想の転換でした!ありがとうございました!
補足
ありがとうございます。ですが、全ての合計を出したいのではなく、1つの地域コードを指定して、表を作成したいのです。ピポットテーブルは検討しましたが、100近くある地域コードについてそれぞれやるのには不向きと思い止めた経緯があります。