AGGREGATION LOGIC DESIGN

集計ロジック設計書

オルイン Vol.79 読者アンケート 自動集計システム設計 | 実データ(AI79データ)に基づく

1
データフロー全体像
Zoho → 生データ → 集計シート → 各成果物への自動連鎖

Zohoフォーム

回答受付
(n=101)

会社名確認シート

GAS自動展開
手動整形

AI79データシート

整形済み生データ
83列×回答数行

集計シート

COUNTIF関数
自動集計

結果シート

数値化コピー
中間チェック用

Googleスライド

報告書自動生成
GAS差し込み

テーマシート

  • 次号テーマ希望(Q最終設問)
  • 回答者属性付き
  • 集計シートが自動参照

集計シート

  • 全設問をCOUNTIFで自動集計
  • SA/MA/4段階/ランキング対応
  • n数で割り%自動算出

編集シート

  • コメント一覧(自動転記)
  • A/B/C仕分けは手動

記事広シート

  • 記事広告コメント仕分け後
  • 企業別に自動整理

純広シート

  • ビジュアル広告コメント仕分け後
  • 企業別に自動整理
2
AI79データシート 列マッピング
Zohoから取得した生データの全列定義(83列)
設問内容集計方法
ANo.回答番号--
B登録日付回答日時-n数カウント(-1でヘッダ除外)
C貴基金名・貴社名会社名(個人情報)個人情報会社名確認シートで整形・匿名化
Dお選びくださいAmazonギフト希望SA集計対象外
E所属組織1〜8のコードSACOUNTIF(E:E, 1〜8)
F資金規模1〜5のコードSACOUNTIF(F:F, 1〜5)
GQ1_1P4 特集「円建て資産」の投資機会MACOUNTIF(G:G, 1)
HQ1_2P24 連載 私の運用報告書MACOUNTIF(H:H, 1)
IQ1_3P26 連載 資産運用に挑む国内大学MACOUNTIF(I:I, 1)
JQ1_4P38 特別企画 企業年金の未来像 座談会MACOUNTIF(J:J, 1)
KQ1_5P48 オルインセミナー開催レポートMACOUNTIF(K:K, 1)
LQ1_6P54 連載 年金運用Q&A 最終回MACOUNTIF(L:L, 1)
MQ1_7P58 コンサルタント・オピニオン 第47回MACOUNTIF(M:M, 1)
NQ2編集企画記事 感想・意見(自由記述)FAテキスト転記のみ
OQ3_1記事広告評価 P18 MFSインベストメント4段階COUNTIF(O:O, 1〜4)
PQ3_2記事広告評価 P20 日本橋バリューパートナーズ4段階COUNTIF(P:P, 1〜4)
QQ3_3記事広告評価 P22 不動産証券化協会4段階COUNTIF(Q:Q, 1〜4)
RQ3_4記事広告評価 P34 ステート・ストリートIM4段階COUNTIF(R:R, 1〜4)
SQ3_5記事広告評価 P36 ナティクシスIM4段階COUNTIF(S:S, 1〜4)
TQ3_6記事広告評価 P50 アクサIM4段階COUNTIF(T:T, 1〜4)
UQ3_7記事広告評価 P52 三井住友DSAM4段階COUNTIF(U:U, 1〜4)
VQ4記事広告 印象ランキング 1位(企業名)ランキングCOUNTIF(V:V, 企業名) ×2点
WQ5Q4の理由(自由記述)FA企業別コメント転記
XQ6記事広告 印象ランキング 2位(企業名)ランキングCOUNTIF(X:X, 企業名) ×1点
YQ7Q6の理由(自由記述)FA企業別コメント転記
ZQ8記事広告 関心なし(企業名)ランキングCOUNTIF(Z:Z, 企業名)
AAQ9Q8の理由(自由記述)FA企業別コメント転記
ABQ10記事広告 自由コメントFA企業別に分類転記
AC〜AFQ11_1〜4ビジュアル広告評価(4社分)4段階COUNTIF(col, 1〜4)
AGQ12ビジュアル広告 印象ランキング 1位ランキングCOUNTIF(AG:AG, 企業名) 単独選択
AHQ13Q12の理由FAコメント転記
AIQ14ビジュアル広告 関心なしランキングCOUNTIF(AI:AI, 企業名)
AJ〜AKQ15〜16ビジュアル広告 理由・自由コメントFAコメント転記
ALQ17プライベートクレジット市場の見解追加SACOUNTIF(AL:AL, 1〜4)
AM〜AXQ18_1〜12プライベートデット投資状況(12項目)追加MACOUNTIF(col, 1) 各列
AY〜BEQ19_1〜7プライベートデット投資先地域(7項目)追加MACOUNTIF(col, 1) 各列
BFQ20新規投資検討プロダクト追加MACOUNTIF
3
設問タイプ別 集計ロジック詳細
集計シートで使用している数式パターンと自動化対応
SA(単一選択)— 所属組織 / 資金規模
集計列:E列(所属組織)、F列(資金規模)
入力値:数値コード(1〜8)
n = COUNTA('AI79データ'!B:B) - 1 【所属組織】 =COUNTIF('AI79データ'!E:E, 1) → 確定給付型(単独・連合) =COUNTIF('AI79データ'!E:E, 2) → 確定給付型(総合) ... =COUNTIF('AI79データ'!E:E, "8*") → その他(前方一致) % = 件数 / n
「その他」はB11&"*"のワイルドカードで「8:生活協同組合」等の表記も一致させる
MA(複数選択)— 編集記事 Q1
集計列:G〜M列(7記事分)
入力値:選択=1 / 未選択=0
【G列 = P4 特集「円建て資産」】 件数 = COUNTIF('AI79データ'!G:G, 1) % = 件数 / n 【H列 = P24 私の運用報告書】 件数 = COUNTIF('AI79データ'!H:H, 1) % = 件数 / n ※ I,J,K,L,M列も同様のパターン
複数回答のため合計が100%を超える。報告書では選択率として表示
4段階評価 — 記事広告 Q3 / ビジュアル広告 Q11
記事広告列:O〜U列(7社)
ビジュアル広告列:AC〜AF列(4社)
入力値:1=非常に興味 / 2=やや興味 / 3=あまり興味なし / 4=まったく興味なし
【O列 = P18 MFSインベストメント】 非常に = COUNTIF('AI79データ'!O:O, 1) やや = COUNTIF('AI79データ'!O:O, 2) あまり = COUNTIF('AI79データ'!O:O, 3) まったく = COUNTIF('AI79データ'!O:O, 4) 各 % = 件数 / n 興味あり計% = (1件数 + 2件数) / n
P,Q,R,S,T,U列(記事広告)とAC〜AF列(ビジュアル)も同パターン
印象ランキング — 記事広告 Q4/Q6(1位×2点 + 2位×1点)
1位選択列:V列(Q4)
2位選択列:X列(Q6)
入力値:企業名テキスト
【企業名 = "P18 MFSインベストメント・マネジメント"】 1位得票 = COUNTIF('AI79データ'!V:V, 企業名) 2位得票 = COUNTIF('AI79データ'!X:X, 企業名) 合計得票 = 1位 + 2位 報告書% = 合計得票 / n / 2 ← ÷2は2択分 加重スコア = 1位×2 + 2位×1 ランク = RANK(合計得票, 全社合計得票範囲)
報告書用%は「回答者÷2」で正規化(1人2票のため)。加重ランクは別集計として内部参考用
関心なし — 記事広告 Q8 / ビジュアル広告 Q14
記事広告列:Z列(Q8)
ビジュアル広告列:AI列(Q14)
【記事広告 Q8】 件数 = COUNTIF('AI79データ'!Z:Z, 企業名) % = 件数 / n 【ビジュアル広告 Q14】 件数 = COUNTIF('AI79データ'!AI:AI, 企業名) % = 件数 / n
単一選択(SA)のため合計が100%になる
印象ランキング — ビジュアル広告 Q12(1位のみ単一選択)
集計列:AG列(Q12)
入力値:企業名テキスト(1社のみ選択)
件数 = COUNTIF('AI79データ'!AG:AG, 企業名) % = 件数 / n
記事広告と異なり1択のみ。加重計算なし。合計が100%になる
テーマシート(最終質問):Q最終設問「次号で取り上げて欲しいテーマ」は自由記述のため集計不要。テーマシートは回答テキストを属性(所属組織・資金規模)付きで一覧表示する専用シートとして使用。報告書の最終ページ「今後のテーマ」セクションへそのまま差し込む。
4
GAS自動化 実装設計
集計シートの数式はそのまま活用し、GASはデータ取得・転記・報告書生成に特化
1

Zoho API → 会社名確認シート 自動展開

GASがZoho APIを叩き、回答データを取得。貴基金名(C列)を会社名確認シートに展開。担当者が整形・確認済みチェックを入れると次ステップへ。

// Zoho APIコール例 const res = UrlFetchApp.fetch(ZOHO_API_URL, {headers: {Authorization: 'Bearer ' + token}}); const data = JSON.parse(res.getContentText()); // 会社名確認シートへ書き込み sheet.getRange(row, 1, data.length, cols).setValues(data);
2

会社名確認シート → AI79データシート 自動転記

「確認済み」チェックを検知したらGASが整形済みデータをAI79データシートへ自動転記。C列(貴基金名)は匿名化ルールに従い変換。

// 確認済み行のみ転記 const confirmed = sheet.getRange('D4:D200').getValues() .map((v, i) => v[0] === '確認済み' ? i : -1) .filter(i => i >= 0); // AI79データシートへ書き込み dataSheet.getRange(nextRow, 1, rows.length, cols).setValues(rows);
3

集計シート — 既存COUNTIF数式をそのまま活用

AI79データシートへの書き込み完了後、集計シートのCOUNTIF数式が自動的に再計算される。GASによる追加集計処理は不要。

// GASは不要。スプシの数式が自動で更新される。 // 必要なら強制再計算をトリガー SpreadsheetApp.flush();
4

結果シート — 集計値を数値コピー(中間チェック用)

集計シートの数式セルを値として結果シートにコピー。コピペ時のずれ防止と中間チェック提出用。

// 集計シートの値をコピー const values = aggSheet.getRange('A1:Z100').getValues(); resultSheet.getRange('A1:Z100').setValues(values);
5

コメント転記 — 編集シート・記事広シート・純広シート

Q2/Q5/Q7/Q9/Q10(記事広告コメント)とQ13/Q15/Q16(ビジュアル広告コメント)をN・W・Y・AA・AB・AH・AJ・AK列から抽出し、各シートへ企業別に自動転記。

// 記事広告コメント抽出例 const data = dataSheet.getDataRange().getValues(); data.slice(1).forEach(row => { const q4company = row[21]; // V列 = Q4 const q5reason = row[22]; // W列 = Q5 // 記事広シートの該当企業セルへ転記 writeComment(q4company, q5reason, '印象1位'); });
6

Googleスライド — GASで報告書自動生成

中間チェック完了後、GASがスライドテンプレートを複製し、集計値・グラフ・コメントを各社分自動差し込み。帯グラフのみWebページからPNG書き出して挿入。

// スライドへのデータ差し込み例 const slide = SlidesApp.openById(TEMPLATE_ID); const shapes = slide.getSlides()[0].getShapes(); shapes.forEach(s => { if (s.getText().includes('{{会社名}}')) s.getText().setText(companyName); if (s.getText().includes('{{興味あり計}}')) s.getText().setText(interestRate + '%'); });
FA(自由記述)コメントの仕分けについて:Q2(編集記事感想)・Q10(記事広告自由コメント)・Q16(ビジュアル自由コメント)はGASで転記後、編集部が手動でA/B/C区分に色付け仕分けを行う。この手動作業は自動化対象外(内容判断が必要なため)。
5
追加質問 Q17〜Q20 集計ロジック
報告書には不掲載・社内参考用の追加設問
設問内容集計ロジック
Q17 プライベートクレジット市場の先行きに対する見解 AL SA COUNTIF(AL:AL, 1〜4) / n で各選択肢の%を算出
Q18 プライベートデット 現在の投資プロダクト(12項目・複数可) AM〜AX MA 各列で COUNTIF(col, 1) / n。12列すべて同じパターン
Q19 プライベートデット 投資先地域(7地域・複数可) AY〜BE MA 各列で COUNTIF(col, 1) / n。7列すべて同じパターン
Q20 新規・追加投資検討中のプロダクト(複数可) BF〜 MA COUNTIF(col, 1) / n
Q17〜Q20は報告書に不掲載・社内参考用。集計シートで集計はするが、Googleスライドへの自動差し込み対象外。編集部が必要に応じて手動で参照する。