XLSForm では、質問のコレクションを複数回繰り返すことができます。 繰り返しの質問の使用方法には、次の例が含まれます。
- 1 つの調査の同じ質問に対して複数の回答を取得します。
- 別々の、小規模のレコードのコレクション (家族全員の名前、年齢、性別など) を取得します。
- 1 つの調査内で複数のマップの質問を取得します。

繰り返しを含む調査を公開する場合、それぞれの繰り返しは、ユーザーのフィーチャ レイヤーの関連テーブルとして作成されます。あるいは、繰り返しにジオポイント、ジオトレース、ジオシェープの質問が含まれている場合は、関連レイヤーとして作成されます。
繰り返しの使用
質問のコレクションを繰り返し、複数の回答を取得するには、スプレッドシートの [survey] タブで次の手順を実行します。
- 繰り返しを開始する行で、[type] 列に「begin repeat」と入力します。
- [name] 列に繰り返しの質問の名前を入力します。
- このエントリーより下の行に、繰り返しの質問に含める内容を入力します。
- 質問のすぐ後の行の [type] 列に「end repeat」と入力します。
これで調査に質問のコレクションが作成され、調査の結果に繰り返し追加できるようになります。 デフォルトでは、質問の繰り返し回数に制限はありません。
繰り返し内の最初のジオポイントの質問のポイント位置は調査のどのマップにも表示できます。 詳細については、「マップのポイント オーバーレイ」をご参照ください。
表示設定
begin repeat の質問の [appearance] 列を [minimal] に設定すると、質問のコレクションが起動時に表示されなくなります。 繰り返しの質問を表示するには、[追加] ボタンをクリックします。 繰り返しの質問を、調査で完了する必要がない場合に便利です。 この表示設定は、繰り返しの開始の質問で定義されます。

繰り返しが [minimal] に設定されており、繰り返し回数がゼロの場合は、その繰り返しのコントロールとこれらのコントロールのラベルが非表示になります。
begin repeat の質問の表示設定を [compact] に設定すると、繰り返しが起動時に折りたたまれた状態で表示されますが、ユーザーはこれを展開することができます。 この機能は、読んだり操作したりするのが困難な縦に長い大きな調査に便利です。 この表示設定は、繰り返しの開始の質問で定義されます。
他の表示設定とは異なり、繰り返しでは minimal と compact の両方を同時に使用できます。その場合は、表示設定を [minimal compact] に設定します。 これにより、繰り返しの質問を折りたたんだ状態 (compact) と非表示 (minimal) で表示できます。
begin repeat の質問の表示設定を [tabular] に設定すると、繰り返し内の質問がテーブルとして表示されます。 詳細については、「テーブル形式の繰り返し」をご参照ください。
注意:
Survey123 Connect では、Survey123 のフィールド アプリまたは Survey123 の Web アプリで使用される調査内で以下の繰り返しの表示設定を行うこともできます。
テーブル形式の繰り返し
注意:
このセクションでは、Survey123 Studio と Survey123 Mobile でのみ利用可能な機能について説明します。
Survey123 Connect、Survey123 フィールド アプリ、Survey123 Web アプリでは、[tabular] の表示設定とそれに関連する XLSForm パラメーターが無視されます。
begin repeat の質問の表示設定を [tabular] に設定すると、繰り返し内の質問がテーブルとして表示されます。 テーブル ビューでは、繰り返し内のレコードが行として表示され、繰り返し内の質問が列として表示されます。 テーブル ビューでは、セル内のデータを直接編集でき、繰り返し内のレコードを並べ替えて確認できます。
以下の画像にテーブル ビューを示します。

上記の画像のコールアウトについて、次に詳しく説明します。
- 各行のメニュー ボタンをタップすると、[フォーム ビューで編集]、[新しいレコードにコピー]、[削除] オプションにアクセスできます。
- 読み取り専用アイコンは、質問 (列) がテーブル ビュー内で編集できないことを示しています。
- 列の見出しをタップすると、テーブル ビューを昇順に並べ替え、必要に応じて以下を行うことができます。
- 列の見出しを再度タップして、降順に並べ替えます。
- 3 回目に列の見出しをタップして、並べ替えを取り消します (元の行の順に戻します)。 代わりに、別の列の見出しをタップして、その列を並べ替えます。
- セル内をタップして、値を編集します。 一部の質問タイプのみがテーブル ビュー内で編集できます。
- セル内の消去ボタンをタップして、その値を削除します。
フォーム ビュー内の個別のレコードを編集することもできます。 フォーム ビューでは、別の、豊富な機能を持つ調査フォーム内に個々の繰り返しレコードが表示されます。
[tabular] の表示設定は、[minimal] および [compact] の表示設定とともに使用できます。
テーブル形式の繰り返しを開始するには、Survey123 Studio で以下の手順を実行します。
- begin repeat の質問の表示設定を [tabular] に設定します。
テーブル ビューは、これに質問を追加するまで空のままとなります。
- 各質問の [body::esri:style] 列に「showInTabularView=true」と入力して、テーブル ビューに 1 つ以上の質問を追加します。
- オプション パラメーターを使用して、テーブル ビューを構成します。
テーブル ビューへの質問の追加
繰り返し内の質問の [body::esri:style] 列に「showInTabularView=true」と入力して、テーブル ビューに質問を追加できます。 テーブル ビュー内で以下の質問タイプを編集できます。
- text
- integer
- decimal
- date
- time
- dateTime
他のすべての質問タイプは、テーブル ビュー内では読み取り専用列として表示されます。
注意:
質問をテーブル ビューに追加するときは、以下を考慮します。
- [readonly] 列に式 (yes を含む) が入っている繰り返し内の質問は、テーブル ビューでは編集できません。
- [body::esri:visible] 列に式が入っている繰り返し内の質問または [hidden] の表示設定がある繰り返し内の質問は、テーブル ビューには表示されません。
- [relevant] 列に式がある繰り返し内の質問は、テーブル ビューには表示されません。
- [required] 列に式 (yes を含む) がある繰り返し内の質問または [constraint] 列に式がある繰り返し内の質問は、テーブル ビューに表示されます。 1 つ以上の required 条件または constraint 条件が満たされない場合は、テーブル ビューの上に一般的な警告が表示されるとともに、エラーのある各レコード (行) に警告アイコンが表示されます。 これらの問題への対処が完了するまで、調査を送信できません。 フォーム ビュー内でレコードを編集して、個々の質問に対する constraint と required の警告メッセージを確認できます。 繰り返しにエラーがある場合は、[body::esri:style] 列の editInFormView パラメーターが false に設定されていても、[フォーム ビューで編集] オプションを使用できます。
テーブル ビューのオプション
begin repeat の質問の [body::esri:style] 列でパラメーターを指定して、テーブル ビューのレコード (行) に関連するオプションを構成できます。 これらのオプション パラメーターを以下の表で説明しています。 複数のパラメーターをスペースで区切って追加できます。 例を以下に示します。
addRecordMode=form copyToNewRecord=false
begin repeat の質問の表示設定を [tabular] に設定し、この質問の [body::esri:style] 列でパラメーターを指定しない場合、デフォルトで、[フォーム ビューで編集]、[新しいレコードにコピー]、[削除] のオプションがテーブル ビューで使用できます。
| パラメーター | 説明 |
|---|---|
| addRecordMode | テーブル ビューの [レコードの追加] ボタンと [新しいレコードにコピー] オプションのモードを指定します。 デフォルトは row です。 値が row の場合、新しいレコードがテーブル ビューに追加されます。 値が form の場合、新しいレコードがフォーム ビューで開きます。 値: row | form 例: |
| editInFormView | テーブル ビューの [フォーム ビューで編集] オプションを表示するか、非表示にします。 デフォルトは true です。 注意:繰り返しにエラーがある場合は、editInFormView パラメーターが false に設定されていても、[フォーム ビューで編集] オプションが有効になります。 値: true | false 例: |
| copyToNewRecord | テーブル ビューの [新しいレコードにコピー] オプションを表示するか、非表示にします。 このオプションを使用すると、ユーザーが繰り返し内でレコードを複製できます。 デフォルトは true です。 addRecordMode パラメーターにより、複製レコードがどのように追加されるかが決まります。 値: true | false 例: |
| editInTabularView | テーブル ビュー内で編集を有効化または無効化します。 デフォルトは true です。 この値が false の場合、テーブル ビュー内のすべてのセルが読み取り専用となります。 値: true | false 例: |
テーブル形式の繰り返しを使用する場合の制限事項
テーブル形式の繰り返しには、以下の制限事項が適用されます。
- ネストされた繰り返しに対する [tabular] の表示設定は、サポートされていません。
- [新しいレコードにコピー] オプションでは、添付ファイルやネストされた繰り返しは新しいレコードにコピーできません。 これは、調査のレコードを [送信済み] フォルダーまたは [受信トレイ] から新しいレコードにコピーするときの動作と一致します。
- テーブル ビューを並べ替えるときは、並べ替えが適用されている列の値を編集しないことをおすすめします。これは、並べ替えがキー入力のたびにただちに更新されるためです。
- テーブル形式の繰り返しが関連の式を持つグループ内に存在する場合、そのテーブル ビューは、グループに関連性が発生したときに空になります。
- 右から左に読む言語では、テーブル ビュー内の列の順序は反転せず、列の見出しが必ずしも右揃えになるとは限りません。
繰り返しの質問のレコード数の指定
注意:
このセクションでは、Survey123 Connect と Survey123 フィールド アプリでのみ利用可能な機能について説明します。この機能は、Survey123 Studio や Survey123 Mobile では利用できません。
繰り返し内で繰り返しの質問のレコード数を指定するには、次の手順に従って繰り返し回数を設定します。
- 繰り返しを開始する行で、[survey] タブの [type] 列に「begin repeat」と入力します。
- [repeat_count] 列に繰り返し回数の数値を入力します。
必要に応じて、数値を返す質問の名前や計算を指定します。
- [name] 列に繰り返しの質問の名前を入力します。
- このエントリーより下の行に、繰り返しの質問に含める内容を入力します。
- 最後の行の [type] 列に「end repeat」と入力します。
ユーザーが調査を開くと、[repeat_count] 列で設定された繰り返し回数がすでに作成されています。 ユーザーは繰り返しの作成や削除を行えません。
ユーザーは、調査の回答を送信する前に、[repeat_count] の値によって定義されたすべての繰り返しレコードに移動する必要があります。 そうしないと、ユーザーがレコードに移動するまで条件式とデフォルト設定が繰り返しに適用されないため、一部の繰り返しレコードが送信されません。 すべての繰り返しが送信されるようにするため、繰り返し内で質問を必須にすることができます。 関連するか条件付きで必要なステートメントが適用される繰り返し内の質問は、送信時には評価されません。
注意:
繰り返し回数の変更を伴う繰り返しの動作は、以下のとおり、ユーザーが調査回答を作成するか、すでに送信された既存の調査回答を編集するかで異なります。
- 調査回答を作成する場合、フィールド アプリは、新しい繰り返し回数を上回るすべてのレコードとこれらのレコードに含まれているデータを削除するボタンをその繰り返しの上部に表示します。空のレコードは自動的に削除されます。 このボタンを押しても押さなくても、調査の回答を送信すると、空のレコードを除くすべてのレコードが送信されます。
- 既存の調査回答を編集する場合は、フィールド アプリは、レコードの数が繰り返し回数と一致しないことを示すメッセージをその繰り返しの上部に表示します。 新規の繰り返しレコードは、[bind::esri:parameters] 列で allowAdds が true に設定されている場合にのみ追加できます。 フィールド アプリは既存の繰り返しレコードの削除をサポートしていないため、繰り返し回数を超過するレコードは削除できません。 編集された調査回答は、繰り返しの質問のレコード数が繰り返し回数と一致しない場合でも、送信できます。
集約関数
注意:
このセクションでは、Survey123 Connect と Survey123 フィールド アプリでのみ利用可能な機能について説明します。この機能は、Survey123 Studio や Survey123 Mobile では利用できません。
集約関数を使用し、繰り返しの回答から得られた値を返すことができます。 このためには、繰り返し内の質問を繰り返し外の質問で参照します。 たとえば、次の式では、繰り返し全体で 1 つの質問に対して回答がカウントされます。
count(${repeated_question})
回答の集約には、次の関数を使用できます。
- count
- sum
- min
- max
- join
これらの関数は、現在の調査の回答にのみ適用されます。 フィーチャ レイヤー内の他のレコードは考慮されません。 繰り返し内に sum と count を使用した質問を含めることも可能です。 ただし、sum と count の値は繰り返しに追加される新しいレコードごとに計算されますが、繰り返し内の過去のエントリーに対する計算は自動的には更新されません。 これらの計算は、質問の横にある [更新] ボタンを使用して手動で更新できます。 min と max の使用は、繰り返しの外部でのみサポートされています。
注意:
sum、count、および join 関数を Survey123 フィールド アプリで使用する場合、繰り返し内または繰り返し外に配置できます。 sum、count、および join を Survey123 Web アプリで使用する場合は、繰り返し外に配置する必要があります。 繰り返し外からの sum 値、count 値、および join 値は、繰り返し内の計算で参照できます。
join 関数を使用し、文字列を返す質問を結合することができます。 また、sum 関数を使用して、繰り返し内のジオポイントの質問を繰り返し外のジオトレースまたはジオシェープの質問として接続することもできます。
これらの関数の使用方法の詳細については、「式」をご参照ください。
繰り返しレコードのインデックスを返す
position(..) 関数を使用して、繰り返し内の繰り返しレコードのインデックスを反映した整数を返すことができます。 たとえば、繰り返し内の最初の繰り返しは 1 を返し、2 番目の繰り返しは 2 を返します。以降も同様です。 以下の例では、繰り返し内の非表示の整数の質問で position(..) 関数を使用します。

注意:
position(..) 関数を繰り返し外で使用するか、繰り返し内のグループの中で使用すると、Survey123 Mobile および Survey123 のフィールド アプリでは常に 0 を返し、Survey123 の Web アプリでは常に 1 を返します。
position(..) 関数は、式で使用することもできます。 次の例では、selected-at() 関数は position(..) を使用して、現在の繰り返しレコードと同じ位置にある select_multiple 質問で選択された選択肢を返し、繰り返しにその選択肢をメモとして表示します。 selected-at() 関数は選択肢のカウントをゼロで開始するため、position(..) から 1 が減算され、以下のとおりインデックスが一致するようになっています。
selected-at(${issues}, position(..)-1)

position(..) 関数と indexed-repeat() を併用すると、特定の繰り返しレコードから質問の値を抽出できます。
インデックス化された繰り返しの値を使用する
注意:
このセクションでは、Survey123 Connect と Survey123 フィールド アプリでのみ利用可能な機能について説明します。この機能は、Survey123 Studio や Survey123 Mobile では利用できません。
indexed-repeat() 関数を使用して、繰り返しレコード内の特定の繰り返しから値を返すことができます。 このためには、質問の名前、繰り返しの名前、繰り返しのインデックス番号が、この順番で必要になります。 次の例では、繰り返し floor 内の 3 番目のレコードについて、質問 room_no に対する回答が返されます。
indexed-repeat(${room_no}, ${floor}, 3)
indexed-repeat() 関数は、繰り返し内の繰り返しに対して使用できます。 この方法で使用する場合は、現在表示されている親の繰り返しからアクセス可能な値のみを受け取ります。
注意:
循環参照の原因となるため、関数が参照している繰り返し内で indexed-repeat() 関数を使用することはできません。 たとえば、defects という名前の繰り返し内で計算に以下の式を使用することはできません。
indexed-repeat(${defect_type}, ${defects}, 3)
既知の制限
Survey123 で繰り返しを使用する場合、次のような既知の制限および予期しない動作があります。
- 調査に複数の繰り返しが含まれており、それらの繰り返しのいずれかにジオポイント、ジオトレース、ジオシェープの質問があると、リレーションシップ名が順不同で公開されることがあります。
- 入れ子の繰り返しは 1 対多のリレーションシップのみをサポートし、各子は 1 つしか親を持つことができません。
- [relevant] 列と [repeat_count] 列の両方に式がある入れ子の繰り返しでは、最初の繰り返しレコード内にあるすべての既存の保存済みデータが消去されます。 これを回避するには、relevant の式を repeat_count の式に組み込み、繰り返しが関連しないときは繰り返しレコードが作成されないようにします。
- ネストされた繰り返しが含まれる調査では、Survey123 Web アプリまたは Survey123 Web サイトでの個々の回答の編集はサポートされません。