分析の基本は集計表である。
集計表そのものでも分析できるし、これを元にグラフ化して分析することもできる。
集計表の作成方法としては、縦横項目に注目する方法と、公報データに注目する方法がある。
縦横項目に注目する方法では、選択した縦項目と横項目を共に含む公報件数をカウントし、集計結果を選択した縦項目と横項目のセルに書き込む。
公報データに注目する方法では、選択した公報データに含まれている項目がどの縦項目と横項目に該当するかを判定し、該当する縦項目と横項目の交点のセルの数値を加算する。
ここでは公報データに注目する方法で集計する方法を例示する。
'変数を宣言
Dim SHEETNAME01 As String, SHEETNAME02 As String, SHEETNAME03 As String
Dim NY1 As Long, NX1 As Integer, NY2 As Long, NX2 As Integer, NY3 As Long, NX3 As Integer
Dim y As Long, x As Integer, k As Long, y1 As Long, x1 As Integer, y2 As Long, x2 As Integer
Dim nclm1 As Integer, nclm2 As Integer
Dim bcode As String, byear As String, btate As String, byoko As String
Dim ntot As Double, nsokei As Double, flg As Integer
'配列を宣言
Dim ctate() As String, cyoko() As String, dnn() As Double
'シート名称設定
SHEETNAME01 = "重複なしデータ"
SHEETNAME02 = "コード別年別集計"
SHEETNAME03 = "縦横項目"
'
''集計対象のカラム数を指定
nclm1 = 10 'コード
nclm2 = 11 '発行年
'==================
'縦項目と横項目をコピーする
'==================
'処理範囲の行列数を取得
Sheets(SHEETNAME03).Select
Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
NY3 = Selection.Rows.Count
NX3 = Selection.Columns.Count
'コピー
Range(Cells(1, 1), Cells(NY3, NX3)).Copy
'ペースト
Sheets(SHEETNAME02).Select
Cells(1, 1).Select
ActiveSheet.Paste
'表の下欄の1行空けて「合計」欄を追加
Cells(NY3 + 2, 1) = "合計"
'
'===================
'縦項目と横項目を読込む
'===================
'処理範囲の行列数を取得
Sheets(SHEETNAME02).Select
Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
NY2 = Selection.Rows.Count
NX2 = Selection.Columns.Count
'配列数を設定
ReDim ctate(NY2 + 1), cyoko(NX2 + 1), dnn(NY2 + 1)
'縦項目を読み込む
Sheets(SHEETNAME02).Select
For y = 2 To NY2
ctate(y) = Cells(y, 1)
Next y
'横項目を読み込む
Sheets(SHEETNAME02).Select
For x = 2 To NX2
cyoko(x) = Cells(1, x)
Next x
'
'===================================================
'縦項目と横項目が共に一致する公報件数を集計し集計表に書き込む
'===================================================
'配列数を設定
ReDim dnn(NY2, NX2)
'配列内容を初期化
For y = 2 To NY2
For x = 2 To NX2
dnn(y, x) = 0
Next x
Next y
'処理範囲の行列数を取得
Sheets(SHEETNAME01).Select
Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
NY1 = Selection.Rows.Count
NX1 = Selection.Columns.Count
'配列のセルアドレスを見つける
For y1 = 2 To NY1
'縦セルアドレスを見つける
bcode = ";" & Cells(y1, nclm1) & ";" 'コード欄読込み
flg = 0
For y2 = 2 To NY2
btate = ";" & ctate(y2) & ";"
If InStr(bcode, btate) > 0 Then
ny = y2
'横セルアドレスを見つける
byear = Cells(y1, nclm2) '発行年
For x2 = 2 To NX2
If byear = cyoko(x2) Then
nx = x2
flg = 1
Exit For
End If
Next x2
'該当セルの配列データを加算する
If flg = 1 Then
dnn(ny, nx) = dnn(ny, nx) + 1
End If
End If
Next y2
Next y1
'配列内容を集計表に書き出す
Sheets(SHEETNAME02).Select
Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
NY2 = Selection.Rows.Count
NX2 = Selection.Columns.Count
For y = 2 To NY2
For x = 2 To NX2
Cells(y, x) = dnn(y, x)
Next x
Next y
'
'==============
'合計を集計する
'==============
'処理範囲の行列数を取得
Sheets(SHEETNAME02).Select
Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
NY2 = Selection.Rows.Count
NX2 = Selection.Columns.Count
'横合計を集計
Cells(1, NX2 + 1) = "合計"
For y = 2 To NY2
ntot = 0
For x = 2 To NX2
ntot = ntot + Cells(y, x)
Next x
Cells(y, NX2 + 1) = ntot
Next y
'縦合計を集計
nsokei = 0
Cells(NY2 + 2, 1) = "合計"
For x = 2 To NX2
ntot = 0
For y = 2 To NY2
ntot = ntot + Cells(y, x)
Next y
Cells(NY2 + 2, x) = ntot
nsokei = nsokei + ntot
Next x
Cells(NY2 + 2, NX2 + 1) = nsokei
'
これにより、コード別年別の公報発行件数の集計表が作成できる。
なお、縦合計を集計表から1行空けて書き込んでいるのは、後でソートするときに合計欄まで含めてソートしないようにするためである。
したがって、分析に使用する最終の集計表では1行空けないようにしている。
またグラフ化の元データとして集計表を作成する場合には発行年を数値ではなく文字にする必要があるので、発行年の数値に「年」を付加してからグラフ化するようにする。