SharePoint リストで「列Aと列Bを足した結果を列Cに入れたい」と考えたとき、まず迷うのが列書式設定(JSON)でできる範囲です。本記事では“表示だけ”と“値として保存”の違いを整理し、目的別に最短の実装手順とサンプルをまとめます。
まず押さえるべき結論:列書式設定(JSON)は“見た目”を変える機能
SharePoint の列書式設定(Column formatting)は、リストやライブラリのビュー上での表示をカスタマイズするための仕組みです。ここが一番大事なポイントで、列書式設定の JSON では列の値そのものを保存・更新することはできません。
そのため、「列Cに A+B(または A−B)を統合したい」という要望は、次の2パターンに分けて考えると迷いません。
| 目的 | やりたいこと | 向いている方法 |
|---|---|---|
| 表示だけ | ビューで列Cに合計・差分を見せたい | 列書式設定(JSON) |
| 保存したい | 列Cを“実データ”として後続の計算・検索・フローで使いたい | 計算列(Calculated Column)または Power Automate |
以降では、まず「表示だけならどう書くか」、次に「保存が必要ならどう設計するか」を、実務でハマりやすい点も含めて具体的に解説します。
表示だけでよい場合:列書式設定(JSON)で A+B / A−B を表示する
列Cに列書式設定を設定し、列A・列Bを参照して計算結果を表示できます。ここでの「列C」は、数値列でもテキスト列でも構いません(ただし見た目が変わるだけで、保存される値は変わらない点は同じです)。
最小構成:合計をそのまま表示する
列A・列Bが数値列で、空欄が入らない前提なら、最小構成はこれで十分です。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"txtContent": "=Number([$ColumnA]) + Number([$ColumnB])"
}
ポイントは次のとおりです。
- ColumnA / ColumnB は列の内部名に置き換えます(後述)。
- 差分(A−B)にしたい場合は、
+を-に変えるだけです。 - 列A・列Bが「数値」列なら Number() は省略できますが、テキスト列が混ざる可能性があるなら変換しておくと安全です。
空欄に強い構成:未入力なら空欄、入力済みなら計算
実運用では「片方だけ未入力」がよく起きます。未入力を 0 とみなすか、計算結果自体を空欄にするかは業務要件次第ですが、ここでは“未入力なら空欄”の例を示します。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "span",
"txtContent": "=if([$ColumnA] == '' || [$ColumnB] == '', '', toString(Number([$ColumnA]) + Number([$ColumnB])))"
}
この書き方にしておくと、未入力時に NaN のような表示になりにくく、利用者が混乱しません。
差分を見せたい:マイナスは赤、プラスは緑などの視覚化
列書式設定の強みは、計算結果をその場で“見やすく”できることです。例えば差分(A−B)を表示し、マイナスなら赤、プラスなら緑で強調できます。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "span",
"style": {
"font-weight": "bold",
"color": "=if(Number([$ColumnA]) - Number([$ColumnB]) < 0, '#d13438', '#107c10')"
},
"txtContent": "=toString(Number([$ColumnA]) - Number([$ColumnB]))"
}
業務でよくある「在庫差分」「予算差分」「工数の超過」などは、マイナスを赤にするだけでも一気に見落としが減ります。
通貨・桁区切りを付けて読みやすくする
合計が大きくなる運用(請求、見積、購買)では、桁区切りや単位があるだけで現場のストレスが大きく変わります。例えば“円”表記にしたいなら次のようにします。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "span",
"txtContent": "=if([$ColumnA] == '' || [$ColumnB] == '', '', '¥' + toLocaleString(Number([$ColumnA]) + Number([$ColumnB])))"
}
表示目的だけなら、こうした「現場が見てすぐ分かる」工夫を JSON で小さく積み重ねるのが効果的です。
列の内部名(Internal Name)を確認する方法
列書式設定の JSON では、列を参照するときに内部名が必要です。見た目の列名を変更していると、内部名と表示名が一致しないことがあります。内部名の確認は次の方法が確実です。
手順:列設定ページの URL を見る
- 対象のリストを開き、右上の歯車(設定)からリストの設定へ移動します。
- 列から対象の列(列A/列B)をクリックします。
- ブラウザの URL に
Field=のようなパラメータが含まれる場合、その値が内部名です(環境により表示のされ方は異なります)。
運用現場では、列名を後から何度も変えることが珍しくありません。列書式設定のトラブルの多くは「内部名の指定ミス」なので、最初にここを押さえるだけで修正が一気に楽になります。
保存が必要な場合:なぜ列書式設定だけでは足りないのか
列書式設定で合計・差分を表示できると、「これで列Cに保存もできたはず」と勘違いしがちです。しかし JSON で変えたのはビューの見た目だけなので、次のような場面で困ります。
- 検索やフィルタ、並べ替えを「計算後の値」でやりたい(表示だけだと計算結果でソートできません)。
- Power Automate や Power BI などで列Cの値として参照したい(取得できるのは元の列Cの値です)。
- Excel にエクスポートした際に計算結果も一緒に出したい(書式設定はエクスポートに反映されません)。
- 監査や履歴の観点で計算結果を確定値として残したい(表示は常に最新計算なので、過去の確定値にはなりません)。
これらの要件が1つでもあるなら、列Cを「計算列」または「Power Automate による書き込み」で“保存する設計”に切り替えるのが安全です。
方法の比較:JSON / 計算列 / Power Automate
要件が混ざると判断がブレるため、まずは特徴を表で整理します。
| 方法 | 列Cに保存される? | 計算の自由度 | 運用コスト | 向いているケース |
|---|---|---|---|---|
| 列書式設定(JSON) | 保存されない(表示のみ) | 中(表示ロジック中心) | 低 | ビューで合計・差分を見せたい/強調表示したい |
| 計算列(Calculated Column) | 実質的に計算結果を列として扱える | 中(関数・参照に制約あり) | 低〜中 | 単純な加減算を“列として”使いたい/並べ替えやフィルタに使いたい |
| Power Automate | 保存できる(書き込み) | 高(条件分岐・外部連携も可) | 中〜高 | 複雑なロジック/例外処理/確定値として残したい/後続フローで利用したい |
迷ったときの目安は、「合計・差分をソート/集計/連携に使うなら保存」「人が見るだけなら JSON」です。
方法1:計算列(Calculated Column)で A+B / A−B を作る
加減算が主目的で、かつ SharePoint 標準の範囲で完結させたいなら、計算列が最短ルートです。計算列は“列として”扱えるため、ビューの並べ替えやフィルタ、集計にも使いやすくなります。
設定手順(概要)
- リストの設定を開き、列の作成を選択します。
- 列名を「列C(合計)」など分かりやすい名前にします。
- 種類で計算(他の列に基づく計算)を選択します。
- 数式に
=[列A]+[列B](差分なら-)を入力します。 - 返すデータ型は、用途に合わせて「数値」や「通貨」などを選択します。
空欄があるときの扱いを決める
計算列でも、未入力時の扱いを決めておくと運用が安定します。未入力なら空欄にしたい場合は、例えば次のような考え方になります。
=IF(OR(ISBLANK([列A]),ISBLANK([列B])),"",[列A]+[列B])
「未入力は 0 とみなして足す」運用なら、式はもっとシンプルにできます。現場の入力ルールに合わせて、曖昧さが残らない式にするのがコツです。
計算列を選ぶときの注意点
- 参照できる列の種類や関数に制約があります。単純な加減算には強い一方、例外だらけのロジックには不向きです。
- 「確定値として固定したい」用途には向きません。計算列は元の列A/列Bが変われば結果も変わります(過去の確定値を残す要件なら Power Automate が向きます)。
- 列A/列Bがテキスト列だと、意図しない結果になりやすいです。できるだけ数値列として設計するのが安全です。
方法2:Power Automate で列Cに計算結果を書き込む
「列Cに保存して、後続のフローや集計で使いたい」「例外処理や条件分岐が多い」「他のリストや外部データも絡む」といった要件では、Power Automate で“作成/更新時に列Cへ書き込む”のが現実的です。
事前準備:列の型を揃える
フローで計算しやすいように、列A・列B・列Cは基本的に数値(Number)で揃えるのがおすすめです。列A/列Bがテキストだと、変換ミスで計算が止まる原因になります。
最小構成のフロー(合計を保存)
- Power Automate で新しいクラウド フローを作成します。
- トリガーをSharePoint:項目が作成または変更されたときにします。
- アクションに作成(Compose)を追加し、合計を計算します。
- アクションに項目の更新(Update item)を追加し、列Cへ書き込みます。
Compose の式例(空欄は 0 扱い、整数として計算):
add(
coalesce(int(triggerOutputs()?['body/ColumnA']), 0),
coalesce(int(triggerOutputs()?['body/ColumnB']), 0)
)
差分(A−B)の式例:
sub(
coalesce(int(triggerOutputs()?['body/ColumnA']), 0),
coalesce(int(triggerOutputs()?['body/ColumnB']), 0)
)
Update item では、列Cに上記 Compose の出力を設定します。これで列Cに計算結果が保存され、検索・ソート・集計・連携に使えるようになります。
“更新ループ”を避ける設計(実務で必須)
同じリストの項目を Update item で更新すると、トリガーが再度発火し、フローがループすることがあります。簡単な検証では気づきにくいので、最初から対策を入れておくのが安全です。
代表的な対策は次の3つです。
| 対策 | 概要 | おすすめ度 |
|---|---|---|
| 変更検知(Get changes) | 列A/列Bが変わったときだけ計算・更新する | 高(堅実) |
| トリガー条件 | 列Cの更新だけでは動かない条件を設定する | 中(設定ミスに注意) |
| フラグ列 | 「計算済み」などの列で制御する | 中(列が増える) |
特におすすめなのは「変更検知」です。フロー内で列Aまたは列Bが変更されたときだけ計算し、列Cだけが変更された再実行は即終了させます。これにより、列Cを書き込んだ自分自身の更新でループする問題を現実的に抑えられます。
運用に強い設計例:入力途中は空欄、確定時だけ計算して保存
現場では「入力途中の項目を勝手に更新されたくない」「確定ボタン(ステータス変更)で初めて金額を確定したい」といった要件も出ます。その場合は、列A/列Bに加えて、例えば「ステータス」列(下書き/確定)を作り、確定になったタイミングで列Cへ書き込む設計にすると運用がブレません。
- ステータスが「下書き」:列Cは空欄(もしくは 0)
- ステータスが「確定」:列Cに A+B を保存し、以後は編集を制限する(権限やルールで担保)
このように、Power Automate は“保存できる”だけでなく、業務フローに合わせた確定タイミングまで設計できるのが強みです。
現場でよくある設計パターン:列Cを二段構えにする
要件が「見やすさ」も「保存」も両方ある場合は、列Cを二段構えにするとトラブルが減ります。
| 列 | 役割 | 実装 |
|---|---|---|
| 列C(保存用) | 後続の集計・連携に使う“実データ” | 計算列 または Power Automate で書き込み |
| 列C(表示用) | 利用者が一目で分かる表現(色、単位、アイコンなど) | 列書式設定(JSON) |
つまり、データとして正しい値は保存用列に持ち、表示用列で見た目を最適化する形です。最初は列が増えるデメリットがありますが、運用が大きくなったときの保守性は圧倒的に上がります。
トラブルシューティング:列書式設定でよく起きる症状と対処
NaN(Not a Number)が表示される
- 原因:列A/列Bが空欄、またはテキストで数字以外が入っている
- 対処:
ifで空欄を弾く、数値列で設計する、Number() で明示変換する
JSON を入れたのに列A/列Bを参照できない
- 原因:列名ではなく内部名が必要なのに、表示名を書いている
- 対処:列設定ページの URL などで内部名を確認し、
[$InternalName]に置き換える
列Cでソートしたいのに順番が合わない
- 原因:列書式設定は見た目だけで、ソートは元の列Cの値で行われる
- 対処:ソートしたいなら、計算列や Power Automate で列Cに保存する設計へ切り替える
Excel へ出したら計算結果が出ない
- 原因:列書式設定はビュー上の表示に限定され、エクスポート対象は列の実データ
- 対処:エクスポートでも必要なら、計算列/Power Automate で値を持つ
よくある質問
列書式設定(JSON)だけで“列Cに書き込む”ことは本当にできない?
できません。列書式設定はあくまで表示のカスタマイズで、保存される値の更新は行いません。「列として保持したい」要件があるなら、計算列か Power Automate のどちらかに寄せるのが安全です。
計算列と Power Automate、どちらを選ぶべき?
加減算が中心で、SharePoint 標準の範囲で完結できるなら計算列がシンプルです。条件分岐が多い、確定値として残したい、外部データや承認など業務フローに組み込みたい場合は Power Automate が向いています。
列A/列Bが文字列(テキスト)列でも計算できる?
表示だけなら JSON で Number() 変換して計算できることがありますが、入力ブレがあると壊れやすいです。保存する前提なら、列A/列Bは数値列へ作り直すか、Power Automate 側で厳密に変換・バリデーションする設計を推奨します。
差分がマイナスになったら警告アイコンを出したい
列書式設定(JSON)なら、差分の条件でアイコンや背景色を出せます。運用上の“見落とし防止”には特に効果が高いので、保存と表示を分けた二段構えにすると堅いです。
Power Automate の計算結果を入力者が上書きできないようにしたい
列Cを読み取り専用に見せるだけならフォームのカスタムなど選択肢はありますが、確実なのは権限やルールで編集を制限することです。例えば「確定後は編集できない」運用にし、フローと合わせて設計するとトラブルが減ります。
まとめ:目的が“表示”か“保存”かで最短ルートが変わる
SharePoint の列書式設定(JSON)で、列Aと列Bの合計・差分を列Cに表示することはできます。一方で、列Cの値として保存したいなら、計算列(Calculated Column)か Power Automate を使うのが現実的です。
まずは「後続の処理で列Cを使うか」「ソート・集計・エクスポートが必要か」を基準に判断し、必要なら保存用の列を用意して、表示は JSON で見やすく整える――この考え方で設計すると、後から要件が増えても崩れにくいリストになります。

コメント