Community で人気のコメント(2) 親行・子行セットの自動追加

Options
jmyzk_cloudsmart_jp
jmyzk_cloudsmart_jp ✭✭✭✭✭✭
edited 02/18/24 in 日本語 (Japanese)

Smartsheet Community (英語版)で人気のコメントのうち、「いいね!」と思ったものをご紹介します。

第2回目は、Smartsheetの コミュニティでの数式の達人、ポール・ニューカム( @Paul Newcome )さんがベストプラクティスとして提案した、「子行をAPIやブリッジを使わずに自動で作る」についての記事です。

https://community.smartsheet.com/discussion/comment/420406#Comment_420406

はじめに

プロジェクト管理などのシートに、メインタスクとそれを構成するサブタスク(子タスク)をフォームなどで自動追加したい場合、 Smartsheetの数式には自動でインデントを作る機能がないので、インデント付きの行の追加の機能のあるSmartsheet APIやブリッジ * を使う必要がありました。

ポールさんの提案した方法を使えば、フォームに親行を構成する列の情報(タスク名、説明、連絡先、ドロップダウンリストなど)を入力すると、その親行とそれに付属するインデントされた子行(子タスク・サブタスク)のセットを自動的に作成することができます。

*ブリッジとはSmartsheetでプログラム的な操作を行うことができるプレミアムアプリです。

階層構造の親タスク・サブタスクのセットが自動追加されたシート(選択されているエリア)のイメージ

https://app.smartsheet.com/b/publish?EQBCT=ed3f653f80b043758a23e54fb59e8168

入力フォームのイメージ

https://app.smartsheet.com/b/form/eeedf60c1f164e06a36e5507ba66275d

具体的方法

フォームシートを用意

まず、親タスク・サブタスクのセットを自動追加するシート以外に、上記のフォームのデータが入力される別のシート(フォームシート、下のイメージ)を用意します。

https://app.smartsheet.com/b/publish?EQBCT=9a4853f69e2240398a3bd726a76e8b34

フォームシートの構造

フォームシートには親行として自動追加する列と同じ構造のフォーム入力用の列を追加します。例えば、上のイメージで言えば、親行として用いるタスク名、説明、日付などの各列に対応して、 F_タスク名、F_説明、F_日付などの列を追加します。 (F_はフォームからくるという意味ですがポールさんの例のようにForm Field A, Form Field Bなど任意の名前で大丈夫です。)

自動追加の仕組み

ポールさんの方法は、Smartsheetのフォーム、数式、自動化などの機能を組み合わせて実現しています。

フォームの新しいエントリーがデフォルトでシートの下部に追加されることを利用

まず、フォームがデフォルトでは最後の行に追加されることを利用しています。このことを利用して、直近に追加されたデータが最下行にあるので、以下の数式を第1行目のタスク名、説明、日付などの各列に置くことで、第1行目に新しいデータがフォームから入力されたときに、そのデータでタスク名、説明、日付などの値を更新することできます。

タスク名 =INDEX([F_タスク名]:[F_タスク名], MATCH(MAX([行 ID]:[行 ID]), [行 ID]:[行 ID], 0))

説明 =INDEX([F_説明]:[F_説明], MATCH(MAX([行 ID]:[行 ID]), [行 ID]:[行 ID], 0))

日付 =INDEX([F_日付]:[F_日付], MATCH(MAX([行 ID]:[行 ID]), [行 ID]:[行 ID], 0))

式を少し説明すると、行 IDは自動番号で、MATCH(MAX([行 ID]:[行 ID]), [行 ID]:[行 ID], 0)で一番最後の行の行 ID(上のイメージでは)を取得します。(ここで使われているMAX([行 ID]:[行 ID])は、最下行などを取得するときによく使われるテクニックです。)

次に、INDEX(INDEX([F_タスク名]:[F_タスク名], 7) により7行目のF_タスク名にある列名の変更の値を取得します。

自動化の行のコピーでインデントされた子行もコピーされることを利用

以上により、フォームから新しいエントリーがあると、第1行目のタスク名、説明、日付などの値が更新されます。この値の更新をトリガーとして、その行を親行、子行のセットを追加したいシート(最上部のワーキングシート)にコピーする自動化を設定します。

自動化で行がコピーされるとき、インデントされた子行も一緒にコピーされるので、結果として、親行、子行が目的のシートに自動追加されます。

まとめ

プロジェクト管理などのシートに、メインタスクとそれを構成するサブタスク(子タスク)をフォームなどで自動追加したい、といった場合に、もちろんAPIやブリッジなどの高度な機能を用いて実現することもできますが、今回のポールさんの提案の優れているところは、既存のSmartsheetの機能をうまく組み合わせて、実用的な代替手段を提供しているところです。

Smartsheetの コミュニティではポールさんのようなグル(guru)が様々なクリエイティブな利用方法を発表しており、Smartsheetユーザにとっての知識の宝庫です。

ヘルプ & ラーニング センター