GetNthRecordで前後レコードを取得
基礎知識

GetNthRecordで前後レコードを取得

2026年5月9日 admin 基礎知識

FileMakerでリスト画面を作っていると、「いま選んでいるレコードの1つ前」「1つ後ろ」の内容を表示したくなることがあります。例えば、前後の履歴を比べたいときや、隣のレコードの値を一緒に表示したいときなどです。

そんなときに便利なのが GetNthRecord 関数です。ただ、使い方や「どのレコードを基準にしているのか」が少し分かりにくく、うまく動かないこともあります。

ここでは、専門用語をできるだけ避けながら、「前のレコード」「次のレコード」を取得する基本的な考え方と、具体的な設定方法を紹介します。

GetNthRecordとは?前後レコードを取るための基本イメージ

GetNthRecord は、簡単に言うと「指定した番号のレコードから、指定したフィールドの値を取ってくる」関数です。

書き方は次のようになります。

GetNthRecord ( フィールド名 ; レコード番号 )

ここで重要なのは、「レコード番号」の部分です。これは「現在のレコードを基準にした相対位置」でも指定できます。

  • 現在のレコード:Get ( RecordNumber )
  • 1つ前のレコード:Get ( RecordNumber ) - 1
  • 1つ後ろのレコード:Get ( RecordNumber ) + 1

この考え方を使うことで、前後のレコードの値を簡単に取得できます。

前のレコードの値を取得する計算式の例

たとえば、「売上」フィールドの1つ前のレコードの値を表示したい場合を考えてみます。計算フィールドやオブジェクトの条件付き書式などで、次のような式を使えます。

GetNthRecord ( 売上 ; Get ( RecordNumber ) - 1 )

この式の意味は、「いま表示しているレコード番号から1つ前のレコードの『売上』を取ってくる」です。

ただし、1件目のレコードには「1つ前」が存在しません。そのため、1件目でこの式を使うと、結果は?(未定義)になります。これを避けたい場合は、条件を追加しておくと安心です。

If (
  Get ( RecordNumber ) > 1 ;
  GetNthRecord ( 売上 ; Get ( RecordNumber ) - 1 ) ;
  ""
)

このようにしておくと、「2件目以降のときだけ前のレコードを取得する」という動きになります。

次のレコードの値を取得する計算式の例

同じように、1つ後のレコードの値を表示したい場合は、レコード番号に +1 をします。

GetNthRecord ( 売上 ; Get ( RecordNumber ) + 1 )

こちらも、最後のレコードには「次のレコード」が存在しません。全レコード数を確認するために Get ( FoundCount ) を使い、範囲外にならないようにしておくと安全です。

If (
  Get ( RecordNumber ) < Get ( FoundCount ) ;
  GetNthRecord ( 売上 ; Get ( RecordNumber ) + 1 ) ;
  ""
)

こうすると、「最後のレコード以外のときだけ、次のレコードの『売上』を取得する」という動作になります。

前後レコードを並べて表示するレイアウト例

具体的な使い方の一例として、「現在・前・次」の3つのレコードの値を1画面に並べて表示するレイアウトを考えてみます。

  1. 「現在の値」を表示する通常のフィールド(例:売上)を配置
  2. テキストオブジェクトや計算フィールドで「前の値」を表示するオブジェクトを作成
  3. 同様に「次の値」を表示するオブジェクトを作成

たとえば、計算フィールド「前回売上」「次回売上」を次のように定義します。

前回売上:

If (
  Get ( RecordNumber ) > 1 ;
  GetNthRecord ( 売上 ; Get ( RecordNumber ) - 1 ) ;
  ""
)

次回売上:

If (
  Get ( RecordNumber ) < Get ( FoundCount ) ;
  GetNthRecord ( 売上 ; Get ( RecordNumber ) + 1 ) ;
  ""
)

これらをレイアウト上で

  • 前回売上
  • 売上(現在)
  • 次回売上

と横に並べておくと、前後のデータを見比べやすい画面が作れます。

GetNthRecordを使うときに気をつけたいポイント

GetNthRecord は便利ですが、次のポイントを押さえておくとトラブルが減ります。

  • 対象は「現在の検索結果の並び順」
    どのレコードを「前後」とみなすかは、現在のソート順に依存します。並び順を変えると、「前のレコード」「次のレコード」も変わります。
  • 関係グラフは関係ない(同じテーブル内で使う場合)
    同じテーブル内で前後レコードを取るときは、リレーションではなく「いまのテーブルのレコード順」を見ています。
  • 別テーブルの前後レコードも取得できるが少し複雑
    別テーブルの前後を取りたい場合は、そのテーブルのコンテキスト(レイアウトやリレーション)によって結果が変わるので、基本的には「同じテーブル内で使う」ケースから慣れていくのがおすすめです。

スクリプトで前後のレコードを移動したいときとの違い

「前のレコード」「次のレコード」と聞くと、「レコードへ移動」ステップを使ったスクリプトを思い浮かべる方も多いと思います。

スクリプトで移動する場合:

  • 画面上で選択中の「対象レコード」そのものを変える
  • ユーザーが見ているレコードを切り替えたいときに使う

GetNthRecord を使う場合:

  • レコードは移動せず、「別のレコードの値だけを参照」する
  • 前後のレコードの値を「同時に表示・比較」したいときに使う

この違いを意識すると、「どちらを使うべきか」が選びやすくなります。

まとめ:前後レコードの参照は「現在のレコード番号」を意識する

GetNthRecord で前後のレコードを扱うときのポイントは次の3つです。

  • Get ( RecordNumber ) を基準に、-1 や +1 で前後を指定する
  • 先頭と末尾のレコードは存在しない位置を指定しないように、If でガードする
  • 結果はあくまで「現在の検索結果の並び順」に従う

これらを押さえておけば、履歴の比較や前後データの表示など、少し高度なレイアウトもシンプルな計算だけで実現できます。まずは1つのフィールドだけでもいいので、「前」「現在」「次」を並べて表示するところから試してみてください。

※ 本稿は、生成AIを使用して執筆しています。重要な内容については、必ずご自身でマニュアル等をご確認ください。