はじめに
この質問は、SmartsheetフォーラムでJim Kiltieさんが投稿したものです。彼は、親子関係に基づいた変更された自動ナンバリング方式を作成しようとしていますが、特定の問題に直面しています。最終的な結果は、IDCalcが変更されたときに上書きされない計算されたIDであるべきです。具体的には、IDNullがtrueの場合にIDCalcの値をID列に埋め込みたいと考えています。しかし、新しい子行を追加すると、IDNumの値がすべての子行に対して増加してしまいます。そのため、ID列に=IDCalc@rowという式を単純に置くことはできません。ジムさんは、ワークフローでこれを実現できるかもしれないと考えていましたが、それはできないようです。この問題に対するアイデアや解決策はありますか?
質問の要約
Jim Kiltieさんは、Smartsheetを使用して親子関係に基づく自動ナンバリング方式を作成しようとしています。彼は、IDCalcの値をIDNullがtrueの場合にID列に埋め込みたいと考えていますが、問題があります。新しい子行を追加すると、IDNumの値がすべての子行に対して増加してしまいます。
答えの要約
jmyzk_cloudsmart_jpさんは、この問題に対する解決策として、Row ID自動ナンバーカラムとParent Row IDヘルパーカラムを追加することを提案しています。また、フォーミュラを修正して、必要なナンバリング方式を実装する方法も説明しています。彼の提案に従うことで、問題を解決することができるでしょう。
翻訳
https://community.smartsheet.com/discussion/comment/405939#Comment_405939
ジム・キルティ ✭
親子関係に基づいて番号付けが行われる、変更された自動番号付けスキームを作成しようとしています。私は正しい道を進んでいると思っていますが、障害にぶつかっています。最終結果は、IDCalc が変更されても上書きされない計算された ID になるはずです。
IDNull が true の場合、IDCalc の値を ID 列に入力したいと考えています。問題は、別の子行を追加すると、すべての子行の IDNum の値が増加することです。したがって、ID 列に =IDCalc@row という数式を単純に入力することはできません。
ワークフローを使用してこれを実行でき、数式を使用して新しく追加された行のIDの値を変更できることを期待していましたが、どうやらそれは不可能のようです。おそらく将来の機能強化でしょうか?
ID に値を入力してそのままにしておく方法を教えてください。
詳細情報:
LastNum = COUNT(CHILDREN(プライマリ@行))
NextNum = PARENT(LastNum@row)
プレフィックス = =IF(ISBLANK(PARENT([ID プレフィックス]@row)), [ID プレフィックス]@row + “-“, PARENT([ID プレフィックス]@row) + “-“)
IDNum = =IF(ISBLANK(NextNum@row), “00”, IF(LEN(NextNum@row) = 1, “0” + (NextNum@row), NextNum@row))
IDCalc =IF(AND(NOT(ISBLANK(Prefix@row)), NOT(ISBLANK(IDNum@row))), JOIN(Prefix@row:IDNum@row), “”)
IDNull = =IF(ISBLANK(ID@row), true, false)
タグ:
ベストアンサー
- jmyzk_cloudsmart_jp ✭✭✭✭✭✭
- 11/21/23 答え ✓
- こんにちは @Jim Kiltie
このソリューションには、行 ID 自動番号列と親行 ID ヘルパー列を追加します。😀
数式を修正する方法
その後、LastNum 式は次のようになります。
=「0」 + MATCH([行 ID]@row, COLLECT([行 ID]:[行 ID], [親 ID]:[親 ID], [親 ID]@row), 0 )
1、2、3 ではなく、01、02、03 のようなゼロ埋め番号付けシステムを使用したいとします。その場合、ここでパディングを行う方が簡単です。
その後、 IDNum 式は次のようになります。
=JOIN(ANCESTORS([最後の番号]@row), “-“) + IF(COUNT(ANCESTORS()) > 0, “-” ;, “”) + [最後の番号]@row
ANCESTORS を使用すると、親、子、孫など、3 レベル以上のケースに対処できます。
IF(COUNT(ANCESTORS()) > 0, “-“, “”) を使用すると、先頭行の不要な区切り文字が削除されます。
「-」の代わりに区切り記号#を使用することもできます。シート概要フィールドを使用する場合。 (下部を参照してください。)
自動番号付けのためのより標準的な方法
公開されているデモ シートの右側で、自動番号付けのより標準的な方法を見つけてください。
固定と動的の違いは、子グループ内の行を移動する場合、私のデモでは固定では同じ Last Num または Self が維持されることです。対照的に、動的のものは、同じ子グループ内の行の相対位置に応じて Last Num を変更します。
「セルフダイナミック」の公式は次のとおりです。列は「LastNum」と同じです。 「自己固定」 MATCH 関数の代わりに RANKEQ 関数を使用して、同じ子グループ内の行の絶対位置を取得します。 - スマートシート
- https://app.smartsheet.com/b/publish?EQBCT=5c7112ac79614f75ac3757230c297e5e
- シートの概要でプレフィックスと区切り文字を指定し、シートのセルの式で、たとえば [ファイル名]#、区切り文字# のように呼び出すことができます。
シート概要を使用すると、これらの値を動的に変更できます。
答え
- jmyzk_cloudsmart_jp ✭✭✭✭✭✭
- 11/21/23 答え ✓
- こんにちは @Jim Kiltie
このソリューションには、行 ID 自動番号列と親行 ID ヘルパー列を追加します。😀
数式を修正する方法
その後、LastNum 式は次のようになります。
=「0」 + MATCH([行 ID]@row, COLLECT([行 ID]:[行 ID], [親 ID]:[親 ID], [親 ID]@row), 0 )
1、2、3 ではなく、01、02、03 のようなゼロ埋め番号付けシステムを使用したいとします。その場合、ここでパディングを行う方が簡単です。
その後、 IDNum 式は次のようになります。
=JOIN(ANCESTORS([最後の番号]@row), “-“) + IF(COUNT(ANCESTORS()) > 0, “-” ;, “”) + [最後の番号]@row
ANCESTORS を使用すると、親、子、孫など、3 レベル以上のケースに対処できます。
IF(COUNT(ANCESTORS()) > 0, “-“, “”) を使用すると、先頭行の不要な区切り文字が削除されます。
「-」の代わりに区切り記号#を使用することもできます。シート概要フィールドを使用する場合。 (下部を参照してください。)
自動番号付けのためのより標準的な方法
公開されているデモ シートの右側で、自動番号付けのより標準的な方法を見つけてください。
固定と動的の違いは、子グループ内の行を移動する場合、私のデモでは固定では同じ Last Num または Self が維持されることです。対照的に、動的のものは、同じ子グループ内の行の相対位置に応じて Last Num を変更します。
「セルフダイナミック」の公式は次のとおりです。列は「LastNum」と同じです。 「自己固定」 MATCH 関数の代わりに RANKEQ 関数を使用して、同じ子グループ内の行の絶対位置を取得します。 - スマートシート
- https://app.smartsheet.com/b/publish?EQBCT=5c7112ac79614f75ac3757230c297e5e
- シートの概要でプレフィックスと区切り文字を指定し、シートのセルの式で、たとえば [ファイル名]#、区切り文字# のように呼び出すことができます。
シート概要を使用すると、これらの値を動的に変更できます。 - ジム・キルティ ✭
- 11/21/23
- @jmyzk_cloudsmart_jp ありがとうございます。これは非常に役に立ち、障害を乗り越えることができました。
まとめ
この投稿では、SmartsheetフォーラムでのJim Kiltieさんの質問に対する解決策が提供されています。問題は、親子関係に基づく自動ナンバリング方式の実装でした。解決策として、Row ID自動ナンバーカラムとParent Row IDヘルパーカラムの追加が提案され、フォーミュラの修正方法も説明されました。これにより、問題が解決され、Smartsheetを効果的に使用するための有用な情報が提供されました。