- 締切済み
エクセルで集計方法
下記のようなエクセルでカウントしたいのですがどのようにしたらいいのか教えてください。 集計条件: (1)年齢(範囲)ごとの習いごとの人数を求めたい (2)年齢の範囲は0歳~9歳,10歳~19歳,20歳~29歳・・ <エクセル> A B 1 8歳 水泳 2 11歳 ピアノ 3 4歳 英語教室 4 6歳 水泳 5 22歳 ピアノ 6 28歳 ヨガ ※ 結果は 下記のようにするのが希望です。 0歳~ 9歳 水泳 2名 0歳~ 9歳 英語教室 1名 10歳~19歳 ピアノ 1名 20歳~29歳 ピアノ 1名 20歳~29歳 ヨガ 1名
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- pkh4989
- ベストアンサー率62% (162/260)
No1 です。 年齢の半角入力が難しいなら、以下のFinctionを入れ替えて 試してみてください。 Function Get_Index(aGe As Integer) As Integer Get_Index = Fix(aGe / 10) + 1 End Function ↓ '「11歳のように」 文字列の場合 Function Get_Index(aGe As String) As Integer aGe = Left(aGe, Len(aGe) - 1) aGe = StrConv(aGe, vbNarrow) Get_Index = Fix(Int(aGe) / 10) + 1 End Function
- kigoshi
- ベストアンサー率46% (120/260)
ピボットテーブルで、かなり近い結果が得られると思います。 まず、年齢は数字のみ、つまり「歳」が入っていないようにして下さい。 ・すでに「歳」がついている場合は =VALUE(LEFT(A1,LEN(A1)-1)) などで数値化できます。・数字データにしても「歳」を表示したい場合は[書式]→[ユーザ定義]で 0"歳" 元データの1行目に項目名「年齢」「趣味」をつけ、範囲選択後、 [データ]→[ピボットテーブルとピボットグラフレポート]→[次へ]→[次へ]→[完了] でピボットテーブルの枠が表示されると思いますのでフィールドリストから「年齢」を「ここに行のフィールドをドラッグします」のエリアにドラッグ&ドロップします。 続いて「趣味」を同じエリアの右端にドラッグ&ドロップします。 さらに「趣味」を「ここにデータアイテムをドラッグします」のエリアにドラッグ&ドロップします。 ピボットテーブルの左上のグレーの部分[年齢▼]のところで右クリック [グループと詳細の表示]→[グループ化]で、先頭の値:0 末尾の値:年齢の最高値 単位:10をいれて[OK]で完成するかと思います。 ご参考になれば。
- pkh4989
- ベストアンサー率62% (162/260)
こんにちは。 以下のマクロで、試してみてください。 但し、A列の年齢は以下のように、必ず半角の数字のみ入力してください。 展開は「E列~」にされます。 例) A列 B列 8 水泳 11 ピアノ 4 英語教室 6 水泳 22 ピアノ 28 ヨガ Type tLesson NM As String CNT(10) As Integer End Type Dim Lesson() As tLesson Dim LessonCnt As Integer Dim tAge As Variant ' Sub 集計() Dim wR As Long Dim ckNm As String Dim wI As Integer Dim xI As Integer Dim c As Range ' Application.ScreenUpdating = False tAge = Array("0歳~9歳", "10歳~19歳", "20歳~29歳", "30歳~39歳", "40歳~49歳", "50歳~59歳", "60歳~69歳", "70歳~79歳", "80歳~89歳", "90歳~99歳") Erase Lesson ckNm = "": LessonCnt = 0 With ActiveSheet wR = .Range("A" & Rows.Count).End(xlUp).Row 'LESSON順ソート .Range("A1:B" & wR).Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("A1"), Order2:=xlAscending For Each c In .Range("B1:B" & wR) If ckNm <> c.Value Then ckNm = c.Value LessonCnt = LessonCnt + 1 ReDim Preserve Lesson(LessonCnt) ' Lesson(LessonCnt).NM = c.Value wI = Get_Index(.Cells(c.Row, 1)) Lesson(LessonCnt).CNT(wI) = Lesson(LessonCnt).CNT(wI) + 1 Else wI = Get_Index(.Cells(c.Row, 1)) Lesson(LessonCnt).CNT(wI) = Lesson(LessonCnt).CNT(wI) + 1 End If Next ' '表示 wR = 0 For wI = 1 To LessonCnt For xI = 1 To 10 If Lesson(wI).CNT(xI) > 0 Then wR = wR + 1 .Cells(wR, 5) = tAge(xI - 1) .Cells(wR, 6) = Lesson(wI).NM .Cells(wR, 7) = Lesson(wI).CNT(xI) & "名" End If Next Next '歳順ソート .Range("E1:G" & wR).Sort Key1:=Range("E1"), Order1:=xlAscending, Key2:=Range("F1"), Order2:=xlAscending End With Application.ScreenUpdating = True End Sub Function Get_Index(aGe As Integer) As Integer Get_Index = Fix(aGe / 10) + 1 End Function マクロ貼付 (1) Alt+F11 (ツール → マクロ → Visual Basic Editor) →「挿入」→「標準モジュール」で表示される画面に貼り付け (2) 実行は、(F5を押す)又は、シート画面に戻って Alt+F8を押してマクロ一覧からマクロ名を選択して実行