Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13604 / 13644 ツリー ←次へ | 前へ→

【4374】集計方法について はらへりおおかみ 03/3/16(日) 22:41 質問
【4377】Re:集計方法について(案その1) りん 03/3/17(月) 8:09 回答
【4471】Re:集計方法について(案その1) はらへりおおかみ 03/3/21(金) 17:45 お礼
【4476】集計方法について(案その2) こう 03/3/21(金) 22:32 発言
【4673】Re:集計方法について(案その2) はらへりおおかみ 03/4/1(火) 23:39 お礼

【4374】集計方法について
質問  はらへりおおかみ  - 03/3/16(日) 22:41 -

引用なし
パスワード
   成績の集計をまとめる方法を考えているのですが
項目ごとに評価の数を集計しようと思っています。
入力用シートに
 項目 成績
 ----------
 国語  A
 社会  B
 数学  C
 国語  B
と入力されている状態です。
集計用シートは下のような形で

  国語 社会 数学 英語 理科
---------------------------------
A  1  0   0   0  0
B  1  1   0   0  0
C  0  0   1   0  0
D  0  0   0   0  0
E  0  0   0   0  0
F  0  0   0   0  0
 
というように集計していきたいのですが、国語が入力されている列、Aが入力されている行に国語がA評価になっている人の数を入力するにはどうしたら良いのでしょうか?

【4377】Re:集計方法について(案その1)
回答  りん E-MAIL  - 03/3/17(月) 8:09 -

引用なし
パスワード
   はらへりおおかみ さん、おはようございます。

>集計用シートは下のような形で
>というように集計していきたいのですが、国語が入力されている列、Aが入力されてい
る行に国語がA評価になっている人の数を入力するにはどうしたら良いのでしょうか?

 VBAではSelectCaseやIfで分岐する方法もありますが、エクセルの機能のピボットテーブルで編集して、マクロの記録をしたものをちょっといじったのがこれ。

Sub Test()
  Dim PT As PivotTable, r1 As Range, r2 As Range
  With Worksheets("Pivot集計用") 'こういう名前のシートを準備
   Set r2 = .Range("A1")
   '既存テーブルクリア
   If .PivotTables.Count > 0 Then .PivotTables(1).TableRange2.Clear
  End With
  '
  With Worksheets("入力用") 'こういう名前のシートを準備
   '1行目には「項目」「成績」が入っていること
   Set r1 = .Range(.Range("A1"), .Range("B1").End(xlDown))
   Set PT = .PivotTableWizard(SourceType:=xlDatabase, _
                 SourceData:=r1, _
                 TableDestination:=r2, _
                 TableName:="Pivot" & .PivotTables.Count)
   PT.AddFields RowFields:="成績", ColumnFields:="項目"
   PT.PivotFields(1).Orientation = xlDataField
  End With
  Set PT = Nothing
End Sub

こんな感じです。

手動でピボットを作る場合は、データ範囲を選択して、
データ → ピボットテーブルレポート
 エクセルのリスト/データベース (次へ)
 範囲(選択していたらそのまま) (次へ)
 エクセルのリスト/データベース (次へ)
 列FieldとデータFieldに項目を、行Fieldに成績をドロップします。 (次へ)
 (データFieldにはデータの個数:項目と表示されていればOK)
 作成先範囲(集計用シートのセルA1)を選択 (完了)
で、クロス集計表が作成されます。

【4471】Re:集計方法について(案その1)
お礼  はらへりおおかみ  - 03/3/21(金) 17:45 -

引用なし
パスワード
   りん さん:
ピボットテーブルを使う方法について教えていただいてありがとうございました。実はIf関数で振り分けることも考えていたのですが、かなり複雑化し過ぎて途方に暮れていました。あと、要素別にグラフ化することを考えていたので、ピボットテーブルなら処理が楽ですよね。

【4476】集計方法について(案その2)
発言  こう E-MAIL  - 03/3/21(金) 22:32 -

引用なし
パスワード
   はらへりおおかみ さん,りんさん こんにちわ。
>ピボットテーブルを使う方法について教えていただいてありがとうございました。実はIf関数で振り分けることも考えていたのですが、

ベタで拡張性があまりありませんが...
項目から列添え字,成績から行添え字を求めて代入する方式です。

  For i = 1 To 4 '成績表の最終行としてください
    Select Case Cells(i, 1) '列添え字
      Case "国語": wcol = 2
      Case "社会": wcol = 3
      Case "数学": wcol = 4
      '    :
      '    :
    End Select
    Select Case Cells(i, 2) '行添え字
      Case "A": wrow = 2
      Case "B": wrow = 3
      Case "C": wrow = 4
      '    :
      '    :
    End Select
    With Worksheets("集計用シート")
      .Cells(wrow, wcol) = .Cells(wrow, wcol) + 1
    End With
  Next i

【4673】Re:集計方法について(案その2)
お礼  はらへりおおかみ  - 03/4/1(火) 23:39 -

引用なし
パスワード
   ▼こう さん:
ありがとうございました。お礼をいうのが遅くなってすみませんでした。
>ベタで拡張性があまりありませんが...
>項目から列添え字,成績から行添え字を求めて代入する方式です。
いろいろな方法があるのですね、とても勉強になりました。

13604 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free