見出し画像

研究の階層を理解して意味のある発表/報告にしよう

2024/12/3追記
この記事で紹介している作業をより簡単に行えるメモツールを付記しました.
気が向いたら記事内の画像も置き換えようかなと考えてます.
(めんどくさい)
ついでに細かい点を修正しました.

この記事はTUT Advent Calendar 2023 5日目の記事です.


概要

こんにちは,も(@TUT21S)と申します.
今年ももう12月となり,B4の皆様が卒論/卒研発表に追われる時期になってきたのではないでしょうか.
今年M1の私は,今年度近接テーマの後輩が4人出来ていろいろな話を聞きながら自分の研究に取り組んでいる最中なのですが,週報や月報で発表を聞くと時々引っかかることがあります.それは「それってこのテーマに繋がるの?」だったり,「そこそんなに細かく言う必要ある?」だったりと多種多様な引っ掛かり方なのですが,共通して「やったこと」はあるけどどう伝えたらいいか分からないことが原因だと感じました.
そこで,今回は私自身が発表を作る/行う際に考えている「研究の階層化」について簡単にお伝えできればと思います.
この記事の想定読者は「なんか毎回変な質問飛んでくるな」「飛んでくる質問がそもそも論すぎる」と感じる方や,まだ体験していないがそれを卒論発表の場で起こしてほしくない方,また発表スライド等を作る際に何を入れればいいか分からなくなる方とします.

「研究の階層化」のメリット

今回行う研究の階層化によって以下のメリットを得ることが出来ます.

  • 自分が今何のためにその作業をしているか明文化出来る(研究内容の主従関係を明確にすることが出来る)

  • 発表スライドを作る時に何を使うか/使わないかを悩まずに選択できる

  • 研究の整合性を確認出来る(実際にやったことを取りこぼしてないか,必要なことをやってないかの確認が出来る)

「研究の階層化」を行う際のルール

早速,実際にどのような手順を踏んでいくかを説明します.
まず以下にルールを提示します.ここは適宜読み返してもらえれば大丈夫なので,今は読み飛ばしてもらっても構いません.

  1. 全ての項目は「目的」「方法」「結果」「結論」のみで構成される

  2. 研究内容を階層分けし,必ず上位の「目的」「方法」「結果」「結論」のどれかに付随する形で下位の内容が置かれる

  3. 研究背景は最も上の階層の「目的」と対応する(研究テーマではなく,究極の目的)

  4. 上位の階層の結論を出す際に使用するエビデンスは,必ずその階層か一つ下の階層に存在するもののみ(⇒階層を二つ以上飛ばして言及してはいけないし,重要なデータなら必ず各階層で言及されている状態にする)

以上の4つになります.これだけだと分かりにくいので,カレーライス作りを例に実際に手順を踏んでみたいと思います.

「研究の階層化」を実際にやってみる

目的設定と本年度研究の位置づけ

大人数でキャンプに出掛け,そこでカレーを作ることを研究対象とします.研究背景は「大人数でキャンプに出掛けた時に最適な食事を作る,その候補としてカレーライスが最適ではないか」というものとします(ここはたとえ話なので適当です.実際には先行研究等を基にどういう利点があってそのテーマを選定したかを書きます).カレーライス作りに必要な要素は沢山あり,例えば周囲環境の話,鍋サイズ,具材の調達方法等いろいろありますが,ここで今年度あなたは「具材についての研究」を行うことになったとしましょう.すると,ルール1~3に則りこのときの階層図は以下のようになります.

究極の目的と本年度の研究の位置づけが出来た

これによって,研究背景(究極の目的)と本年度の研究目的の主従関係がはっきりしました.また,試しに本年度の研究方法を「具材の種類選定」「具材の切り方」「具材の下処理」とします.するとこの図は以下のように変化します.


上層でやりたいことの為に下に層を作り,それぞれで結果,結論まで出す作業を行う

この階層化を繰り返し行うことで,最終的に自分が実際に行った作業レベルまで階層を分けることが出来ます.ここで大事なのは,結果や結論が出ていない項目でも必ずこのスキームを適用し,未達成であることを可視化することです.これによって,今後どのような研究を行うかを確認しやすくなる副次的な効果が生まれます.

今月の作業内容を追加してみる

あなたは今月,「適切な野菜の切り方」の研究を行うために,「カメラ・包丁・まな板を買って,カメラをいい感じに設置して,人参を何種類かの方法で切って撮影し,聞き取り調査を行った」とします.これを先ほどの図に組み込む際もやはり「目的」「方法」「結果」「結論」のスキームに則ります.この時,実際に作業した内容をどういう理由で行ったかを羅列
し,どちらが上位の層に当たるか,あるいは並列か
を考えます.これはすなわち,

  • なぜカメラを購入した?

  • なぜまな板/包丁を購入した?

  • なぜカメラをいい感じに設置した?
    ⇒(まとめて)聞き取り調査に適した写真を撮影するための設備を整えるため

  • なぜ人参をいい感じにカットした?
    ⇒聞き取り調査に適した写真を撮影するため

  • なぜ聞き取り調査を行った?
    ⇒人参における統計的に適切な切り方のデータを得るため

というような感じです.これはいわゆるなぜなぜ分析に近しく,この理由にさらに理由付けを行うと上位の層の方法や目的が見え,それを繰り返すと究極の目的にたどり着きます.
そんなわけで,これらの階層の材料から,どちらが上位か,あるいは並列かを考えて配置したものが下の図になります.


「人参の切り方の調査の為」に行った「カメラ」「包丁,まな板」はより下の層に追加されている

これによって,今月の作業が本年度の研究においてどの程度の立ち位置なのかが明記され,また行った作業内の重要度(どちらが上位か=報告のメインになるか)がはっきりしました.
ここで,(この後記述)となっている項目を埋めることを考えます.やり方は簡単で,埋めたい項目の一つ下の層からエビデンスとなるデータや結論を引っ張ってくるだけです.ここでは結果,結論など,アウトプットとして得られているものであれば何でもいいのですが,二つ以上下の層から結果や結論を引っ張ってきてはいけません.もし何層も同じ結果や結論を使用したい場合は,その中間の層でも必ず重要であり毎回言及する必要があります.それはこの後作成した階層を使って報告資料を作る際に重要となってきますので必ず守ってください.


一つ下の結果を利用して,上層の結論を出すことが出来た

以上が「今月の作業」を全体の進捗に組み込む具体的な方法となります.この方法を,週単位の報告から年度単位,修士までの3年間全体での研究で利用することで,自分が今何をしたくて何をしているかが明確になります.

報告/発表スライドを作ろう

ここまでで研究内容を階層化するインプットの部分は終わりました.ここからは報告や発表のスライドを作る点にフォーカスしていきます.
そうは言っても,ここまで整理出来ればちゃんとしたやつが出来るんじゃないの?と思った方,実はそこに落とし穴があるかもしれません.それはこの後提示するルールを読んでもらえば分かるかと思います.
階層構造を利用した報告・発表スライドを作成する際のルールは以下の通りです.

  1. 「報告をメインで行う階層」をその期間実施した層の1層上に設定する(例えば,月報であれば年度の研究目標,学会などの年間単位での実施内容の報告であればその上の層,カレーの例なら究極の目的)

  2. その報告で使用可能な階層はメインで設定した階層とその2つ下まで(合計3階層,完結できるなら2階層に削った方がいい)

  3. 最上層からメインで報告する階層までの目的,方法のみは例外的に追加で使用してもよい(ただし,2~3階層程度に留めるとベター)

  4. 3番の利用は聴衆の属性(その研究との関連度,理解度)に応じて適宜調整する

またしても何言ってんだ?となると思いますので先ほど作成したカレーライスの例を持って来ましょう.なお,分かりやすさの為に玉ねぎの切り方調査の追加など少し変更を加えています.

現在の研究階層図

週報スライドを作ってみる

まずは一番簡単な例である週報から始めましょう.今週行ったことを「とりあえず実験を行うための用意としてカメラを買って設置した」だったとします.すると,ルール1に従って報告すべきメインの層はその一つ上である「人参のカット,撮影」であることが分かります.

現段階での状況と報告内容

この報告を文章で簡潔にまとめると,「人参のカットと撮影を実際に行う(上位目的)ため,記録用カメラの適切な選定,購入,設置を行った(目的・方法).購入したカメラの性能は以下の通りで,以下のように設置を行うことが出来た.(結果・考察)」となります.これに加え,想定される聴衆を「先生と同じグループ内の学生」とし,ルール3,4を適用します.つまり,「人参のカットと撮影」が何のために行われるかを明文化した方が,研究にそこまで関わりのない他の学生が理解するために,より上層の目的を利用します.


スライドの内容の補助のため,より上層の目的,方法を利用する

これによって,さきほどの報告の文頭は以下のように変化します.「適切な野菜の切り方の調査として,まず人参のカット方法を調査する.調査は複数の人参のカット写真を用いて聞き取り調査を行う方法を取る.今週は人参のカットと撮影に向けてカメラの準備を行った」.こちらの方がどういう文脈でその調査を行うかが直感的に伝わりやすくなると思います.
また,今後の予定としては「メインに設定した層の結果・結論を出すために今後何をしていくか」を記述すると明確になります.そういう意味でも,メインの報告内容は実施内容の1層上に置くと良いことがわかるかと思います.

月報スライドを作ってみる

では月報の場合はどのような構造に変わるかを考えてみます.今月行ったことは前回と同様「適切な野菜の切り方」の研究を行うために,「カメラ・包丁・まな板を買って,カメラをいい感じに設置して,人参を何種類かの方法で切って撮影し,聞き取り調査を行った」とします.すると,実施内容と報告内容は以下の通りになります.

先ほどと同様に実施内容の1層上を報告する,また3層より下は使用しない

ここで大事になってくるのがルール2の「その報告で使用可能な階層はメインで設定した階層とその2つ下(合計3階層)まで」です.そのため画像内ではカメラの設置,まな板・包丁の用意については報告しないということになります.要は,余計に細かい情報をいちいち説明するとどこの何を説明してるのか分からない報告になってしまい,伝えたいメイントピックがぼやけてしまうのでそれを避けよう,ということです.これによって「ここの数字/数式をわざわざ説明する必要ある?」となるような事態を避けることが出来るわけです.当然,必ず記載する必要のある数式などであれば上層に引用されているはずなので問題が起きることはありません.
また,週報の時と同様に理解の為により上位の目的,方法を引用してスライドを作成します.今回は究極の目的(研究背景)と直前の目的,方法を利用してみます.

月報スライドを作る時に使う情報を明確に示すことが出来た

すると,報告は「カレーライスを作る際に必要な要素としてカレーに適した具材を用意することが挙げられる.その中で,具材の切り方は食感にかかわる重要な部分であるためこれを研究する.カレーに入れる具材は様々だが,まずは野菜の切り方についての調査を行う.今月は人参についての調査を行ったので報告する」といった感じで組み立てることが出来ます.なお,途中の「食感に関わる~」は今回適当に理由付けをしましたが,実際の研究では理由をもってその項目を研究しているはずです.

研究を見直してみよう

ここまでは研究の階層化による新たなインプットの追加,研究の階層図を利用したアウトプットの話をしました.これによって変な報告をして突っ込まれることはかなり減ると思います.では,果たして研究内容自身には変な突っ込みをされる穴が無いでしょうか?実は階層図を確認することで研究の整合性のチェックも行うことが出来ます.
やり方は簡単で,上層から下層に向けて順番に「上層の引き出し元と目的の対応」と「上層の引き出し元と下層の目的の対応」に整合性が取れているか確認するだけです.
今回のカレーライスの例ではすべて「方法」に下層を作っているためそこを確認します.例えば「人参の切り方調査」という項目の方法に対して,「人参のカット,撮影」という下層の目的は適切でしょうか.この場合必要なのはカットされた状態の写真であるため「人参のカット,撮影」ではなく「カット状態の写真の取得」が適切ではないでしょうか.また,「カット状態の写真での聞き取り調査」の結果は「人参の適切な切り方」と1:1で対応しているでしょうか.結局,カレーの具材は煮込んだ状態で食べるわけですから写真を撮ってもどうしようもないかもしれません.それらをまとめると以下のように指摘できます.

実はこの研究は穴だらけだったことが分かる

このように今までとりあえずやってたことを階層化して,研究の究極の目的からの繋がりを明確に示すことで果たして最適な研究を行えているかどうかを可視化して判断することが出来ます.この研究の場合,指摘点が多すぎておそらくはかなり前の段階からやり直す羽目になると思われますが,皆さんの研究はどうでしょうか.

まとめとよくありそうな質問

まとめ

今回は,研究内容を階層化して分類する方法について紹介してきました.研究内容を「目的」「方法」「結果」「結論」でまとめ,究極の目的から実務レベルまでの繋がりを明確に示すことで発表スライドを作りやすくなったり,研究の見直しが出来ることがお分かりいただけたかと思います.これから卒研発表のスライドを作ることになるB4の方々の参考になれば幸いです.

よくありそうな質問

ここからは皆さんが浮かべそうな疑問についてQ&A方式で置いておこうと思います.また,質問が飛んで来たら別途回答する他適宜追記します.ご質問はTwitterのDMまでお願いします.

  • 「考察」の項はないの?
    考察の項はあえて設けていません
    .あえて作るならば結果と結論の間に作ってもいいですが,考察から下層が出ることはないはずです.「結果」におけるデータを用いて考察をするのであって,考察から追実験などを行うと追加のデータが生まれ整合性が取れなくなる(相互参照が生まれる)ためです.後述もしますが,追実験の必要性が示唆された場合は「結論」として「追実験の必要性が示唆された」ことを記述し,そこから下層を生んで追実験の結果や結論を記述しておくべきです.

  • 「方法」以外の部分で下層を作っちゃダメなの?
    そんなことないです.前述の通り追実験を行う必要があるとき等は「結論」から下層を作れます.ただし,「目的」「結果」からは下層が生まれないと考えています.「目的」から新たに「目的」が生まれる状況がまず思い浮かばないのと,「結果」は単にデータ等の置き場に過ぎないためです.例えば新しいデータ処理の方法を思いついたならば,その旨を結論に記載して下層を作るべきではないかと思います.

  • 図を作るのめんどいんだけど
    別に必ず図を作らなくても,階層が明示出来れば何でも大丈夫です.自分もめんどくさいのでテキストファイルのインデントを使って管理しています.今回図作るのめっちゃめんどかった
    ⇒簡単に行えるメモツールを追加しました!

  • やってみたらめっちゃ指摘点見つかって研究萎えた
    残念ながら研究結果をどうにか出来るツールではないためドンマイとしか言いようがありません…しかしながら,もしB4だったとしたらその研究を後2年やるわけですから,今のうちに大きな問題が見つかったのはいいことかもしれません.もし取り返しのつかない整合性のなさでもう卒業する,みたいな状態であれば,後続の研究の為にちゃんと問題点を先生や引継ぎの後輩に教えるのもやさしさかもしれません.いずれにせよ,あなたが今年度やったことはあるはずなのでとにかくアウトプットして学位は得ておきましょう.

メモツール配布(24/12/03追記)

さて,ここまでの内容を読んでみて実際に自分の研究にも適用したくなった方もいるのではないでしょうか.
そんな方のために簡単に使えるメモツール(VBAマクロ)を作成しました.動作要件やツール概要は以下の通りです.

  • 動作環境:Microsoft Excel (バージョン 2410 ビルド 18129.20158で動作確認)

  • 動作確認環境:Windows 10

  • コード内容:シート内における「メモグループ(階層化したメモ)」の作成,整形

    • AdjustMemoGroup : すでにあるメモのサイズ自動調整(文章が長くなった際にこのマクロを使えば下方向にサイズを調整してくれる)

    • CreateCustomizedGroupedRectangles : 新規メモグループの作成
      A1セルに作られる

    • CreateMemoGroupBottomOfSelection : 新規メモグループの追加
      メモグループを選択した状態で使う
      選択されたメモグループの下に追加する(並列項目の追加に便利)

    • CreateMemoGroupRightOfSelection : 新規メモグループの追加
      メモグループを選択した状態で使う
      選択されたメモグループの右に追加する(子ツリーの追加に便利)

  • 配布,改変について

    • 無償かつ公開ページ(当ページ)の情報提示を条件として,再頒布可,改変可,改変物の再頒布可

    • 有償による再頒布,改変物の再頒布の禁止

  • 面積事項:このツールの使用,作成等によって生じた直接的・間接的な全ての損害について責任を負いません.当ツールは脆弱性の利用を目的とはしていませんが,今後脆弱性が発見される可能性があります.対応可能の場合は適宜対処しますが,重大な脆弱性によって修復が困難な場合は修正がなされていない可能性があります.十分に注意の上使用してください.

コード

' created by も(@TUT21S)
' 公開ページ:「研究の階層を理解して意味のある発表/報告にしよう」,noteにて公開, https://note.com/tut21s/n/n21c0e771e9b0
' 公開ページの情報提示を条件として,全て無償に限り再配布ok,改変ok,改変物の再頒布ok
' 改変したコードを含む有償頒布禁止(悲しくなるため)
' この文より上,およびこの文の削除禁止(作成情報の保持のため)


Sub CreateCustomizedGroupedRectangles()
    Dim ws As Worksheet
    Dim selectedShape As shape
    Dim startX As Single
    Dim startY As Single
    Dim newGroupShape As shape
    
    ' ワークシートを設定
    Set ws = ThisWorkbook.Sheets(1)
    
    ' A1セルの左上の位置を取得
    startX = ws.Cells(1, 1).Left
    startY = ws.Cells(1, 1).Top
    
    ' 新しいメモグループを作成
    Set newGroupShape = CreateMemoGroup(ws, startX, startY)
    
End Sub

Sub CreateMemoGroupRightOfSelection()
    Dim ws As Worksheet
    Dim selectedShape As shape
    Dim startX As Single
    Dim startY As Single
    Dim newGroupShape As shape

    ' ワークシートを設定
    Set ws = ThisWorkbook.Sheets(1)

    ' ユーザが選択した図形がメモグループかどうか確認
    On Error Resume Next
    Set selectedShape = Application.Selection.shapeRange(1)
    On Error GoTo 0

    If selectedShape Is Nothing Then
        MsgBox "メモグループを選択してください。", vbExclamation
        Exit Sub
    End If

    ' メモグループであるか確認
    If Not selectedShape.Type = msoGroup Then
        MsgBox "選択した図形はメモグループではありません。", vbExclamation
        Exit Sub
    End If

    ' 開始位置を設定
    startX = selectedShape.Left + selectedShape.Width + 50 ' 50ポイントの隙間を設ける
    startY = selectedShape.Top

    ' 新しいメモグループを作成
    Set newGroupShape = CreateMemoGroup(ws, startX, startY)

End Sub

Sub CreateMemoGroupBottomOfSelection()
    Dim ws As Worksheet
    Dim selectedShape As shape
    Dim startX As Single
    Dim startY As Single
    Dim newGroupShape As shape

    ' ワークシートを設定
    Set ws = ThisWorkbook.Sheets(1)

    ' ユーザが選択した図形がメモグループかどうか確認
    On Error Resume Next
    Set selectedShape = Application.Selection.shapeRange(1)
    On Error GoTo 0

    If selectedShape Is Nothing Then
        MsgBox "メモグループを選択してください。", vbExclamation
        Exit Sub
    End If

    ' メモグループであるか確認
    If Not selectedShape.Type = msoGroup Then
        MsgBox "選択した図形はメモグループではありません。", vbExclamation
        Exit Sub
    End If

    ' 開始位置を設定
    startX = selectedShape.Left
    startY = selectedShape.Top + selectedShape.Height + 20 ' 20ポイントの隙間を設ける


    ' 新しいメモグループを作成
    Set newGroupShape = CreateMemoGroup(ws, startX, startY)

End Sub

Function CreateMemoGroup(ws As Worksheet, startX As Single, startY As Single) As shape
    Dim baseRect As shape
    Dim rect As shape
    Dim shapeRange As shapeRange
    Dim i As Integer
    Dim j As Integer
    Dim baseName As String
    Dim uniqueID As String
    Dim rectWidth As Single
    Dim rectWidth2 As Single
    Dim rectHeight As Single
    Dim toprectHeight As Single
    Dim labels As Variant

    ' ユニークな名前のベースを設定
    baseName = "GroupRect"
    uniqueID = Format(Now, "yyyymmddHHMMSS")

    ' 長方形のサイズを設定
    rectWidth = 50
    rectWidth2 = rectWidth * 4
    toprectHeight = 25
    rectHeight = 50

    ' ラベルを設定
    labels = Array("目的", "方法", "結果", "結論")

    ' 一番上の青色の長方形を作成
    Set baseRect = ws.Shapes.AddShape(msoShapeRectangle, startX, startY, rectWidth + rectWidth2, toprectHeight)
    baseRect.Name = baseName & "_Base_" & uniqueID
    baseRect.Fill.ForeColor.RGB = RGB(0, 0, 255)
    baseRect.TextFrame2.TextRange.Text = "Title"
    With baseRect.TextFrame2.TextRange.Font
        .Name = "Noto Sans JP"
        .Size = 14
        .Fill.ForeColor.RGB = RGB(255, 255, 255)
    End With
    baseRect.TextFrame2.HorizontalAnchor = msoAnchorCenter
    baseRect.TextFrame2.VerticalAnchor = msoAnchorMiddle

    ' その下に2列4行の長方形を隙間なく配置
    For j = 0 To 3
        ' 1列目
        Set rect = ws.Shapes.AddShape(msoShapeRectangle, startX, startY + toprectHeight + j * rectHeight, rectWidth, rectHeight)
        rect.Name = baseName & "_Rect_1_" & (j + 1) & "_" & uniqueID
        rect.Fill.ForeColor.RGB = RGB(255, 255, 255)
        rect.TextFrame2.TextRange.Text = labels(j)
        With rect.TextFrame2.TextRange.Font
            .Name = "Noto Sans JP"
            .Size = 14
            .Fill.ForeColor.RGB = RGB(0, 0, 0)
        End With
        rect.TextFrame2.HorizontalAnchor = msoAnchorCenter
        rect.TextFrame2.VerticalAnchor = msoAnchorMiddle

        ' 2列目
        Set rect = ws.Shapes.AddShape(msoShapeRectangle, startX + rectWidth, startY + toprectHeight + j * rectHeight, rectWidth2, rectHeight)
        rect.Name = baseName & "_Rect_2_" & (j + 1) & "_" & uniqueID
        rect.Fill.ForeColor.RGB = RGB(255, 255, 255)
        With rect.TextFrame2.TextRange.Font
            .Name = "Noto Sans JP"
            .Size = 11
            .Fill.ForeColor.RGB = RGB(0, 0, 0)
        End With
    Next j

    ' グループ化するためにすべての図形の範囲を取得
    Set shapeRange = ws.Shapes.Range(Array(baseRect.Name, _
                                           baseName & "_Rect_1_1_" & uniqueID, baseName & "_Rect_1_2_" & uniqueID, _
                                           baseName & "_Rect_1_3_" & uniqueID, baseName & "_Rect_1_4_" & uniqueID, _
                                           baseName & "_Rect_2_1_" & uniqueID, baseName & "_Rect_2_2_" & uniqueID, _
                                           baseName & "_Rect_2_3_" & uniqueID, baseName & "_Rect_2_4_" & uniqueID))

    ' グループ化
    Set CreateMemoGroup = shapeRange.Group
    CreateMemoGroup.Name = baseName & "_Group_" & uniqueID
End Function


Sub AdjustMemoGroup()
    Dim selShape As shape
    Dim selGroup As groupShapes
    Dim rect1 As shape
    Dim rect2 As shape
    Dim i As Integer
    Dim j As Integer
    Dim shiftHeight As Single
    Dim originalHeight As Single

    ' 選択されている図形を取得
    On Error Resume Next
    Set selShape = Selection.shapeRange(1)
    On Error GoTo 0

    If selShape Is Nothing Then
        MsgBox "メモグループが選択されていません。"
        Exit Sub
    End If

    ' グループ化されているか確認
    If selShape.Type <> msoGroup Then
        MsgBox "メモグループを選択してください。"
        Exit Sub
    End If

    Set selGroup = selShape.GroupItems

    ' 下の24行の2列目の長方形のテキストがはみ出している場合、高さを調整する
    For i = 1 To 4
        Set rect1 = selGroup(i * 2) '1列目の対応する長方形
        Set rect2 = selGroup(i * 2 + 1) '2列目の長方形

        ' 元の高さを記録
        originalHeight = rect2.Height

        ' AutoSizeを一時的に有効にする
        rect2.TextFrame2.AutoSize = msoAutoSizeShapeToFitText

        ' テキストがはみ出している場合の処理
        If rect2.Height > originalHeight Then
            shiftHeight = rect2.Height - originalHeight

            ' 長方形の高さを調整
            rect1.Height = rect2.Height

            ' 調整された行より下にある図形をずらす
            For j = (i * 2 + 2) To selGroup.Count
                selGroup(j).Top = selGroup(j).Top + shiftHeight
            Next j
        Else
            ' AutoSizeで変更がない場合は元の高さに戻す
            rect2.TextFrame2.AutoSize = msoAutoSizeNone
            rect2.Height = originalHeight
        End If
    Next i

    ' 1列目の長方形を2列目の高さに合わせる
    For i = 1 To 4
        Set rect1 = selGroup(i * 2) '1列目の対応する長方形
        Set rect2 = selGroup(i * 2 + 1) '2列目の長方形

        ' 1列目の高さを2列目に合わせる
        rect1.Height = rect2.Height
    Next i
End Sub

使い方

  1. Excelへの組み込み
    新しいファイルへ上記コードを埋め込みます.Excelを開いて開発タブを開き(開発タブがない場合はここを参照),"Visual Basic"をクリックした後に左側の"Sheet1"なり"ThisWorkbook"なりを選択しコードをコピペします.
    一応,"ワークシートの設定"の項目によってどのシートにオブジェクトを作るかを制御しているので,1つのファイルあたり1つのシートで使うことをお勧めします(うまく改変して使ってください)

  2. 使いやすいようにボタン等を追加してマクロ保存
    一応,この状態でも使うことができますがボタンがあった方が便利だと思います.
    適当な図形を追加して,右クリックからマクロの登録を選択してください.おすすめは以下のボタンラベルとマクロの対応です.

    • サイズ調整:AdjustMemoGroup

    • 新規:CreateCustomizedGroupedRectangles

    • 並列ツリー:CreateMemoGroupBottomOfSelection

    • 子ツリー:CreateMemoGroupRightOfSelection

  3. メモを作る
    実際にメモを作ります.この時,矢印で結ぶことで内容の引用や子ツリーの対応関係等が分かりやすくなります.

メモの実用例 青の線を使って子ツリーをつなげ,オレンジの線で内容を上位に引用している

ツールFAQ

  • なんでExcel?
    一番の理由は,キャンバスが無限大のツールの中で最も簡単に環境を用意できるからです.おまけの効果として,矢印等のほかのオブジェクトも簡単に追加できるほか,直接的なメモや文章作成も使えるため,相当便利だなと感じています.

  • 再頒布等の条件は?
    配布,改変についてを読んで下さい(コードの上あたりにあります)

  • その他わからないことがある/連絡を取りたい
    も(@TUT21S)までご連絡ください.


いいなと思ったら応援しよう!