閉曲線のスプライン補間|数式導出からExcel VBAで実装まで
- yuji fukami
- 1月21日
- 読了時間: 7分
更新日:4 日前

今回の記事では、閉曲線のスプライン補間について解説していきます。数式の導出から始め、最終的には Excel VBA 上でどのように実装できるか までを、一連の流れとして説明することを目的としています。
一般的なスプライン補間は、点列を 一方向に滑らかにつなぐ ことを目的とします。たとえば、x 座標に対して y 座標を補間するようなケースでは、始点と終点は明確に分かれており、曲線は「開いた形」となります。
一方で、本記事で扱う 閉曲線のスプライン補間 では、点列が 始点と終点を共有し、周期的に接続される ことを前提とします。
このような閉曲線スプライン補間は、「閉じた形状を、点情報から自然な曲線として復元したい」という場面で非常に有効です。
閉曲線スプライン補間が役立つ代表的な分野
閉曲線スプライン補間は、数学的な理論だけでなく、実務・工学・データ可視化の分野でも幅広く利用されています。代表的な例を挙げると、次のような用途があります。
1. 等高線図・地形データの生成(測量・地理分野)
測量や地理情報処理では、標高データから 等高線 を作成する必要があります。等高線は基本的に 閉じた曲線 となるため、離散的な測定点を滑らかにつなぐ処理が不可欠です。
閉曲線スプライン補間を用いることで、
不自然な折れや角のない等高線
視認性の高い地形図
を生成することができます。
2. 気圧線・等温線などの可視化(気象分野)
気象データにおいても、
等圧線(気圧線)
等温線
等湿度線
といった 閉じた曲線 を描画する場面が頻繁に登場します。
これらは観測点が離散的であるにもかかわらず、人が直感的に理解できる「滑らかな線」として表示する必要があります。
閉曲線スプライン補間は、このような データ可視化の品質向上 に大きく貢献します。
3. 図形処理・CAD・輪郭抽出
画像処理や CAD 分野では、
輪郭点から滑らかな外形を復元する
手書き入力やスキャンデータを整形する
といった処理が行われます。
特に対象が 閉じた形状(部品形状・外周形状など) の場合、閉曲線スプライン補間を用いることで、
接続点での不連続
曲率の急変
を防ぎ、自然な形状を再構築することが可能になります。
4. 数値解析・シミュレーション分野
流体解析や物理シミュレーションにおいても、
境界条件が閉じた形状を持つ問題
周期境界を持つモデル
では、閉曲線としての補間処理が必要となります。
このような場合、単純な補間では境界の不連続が発生するため、閉曲線スプライン補間の考え方が有効になります。
式導出(閉曲線のスプライン補間)
点列とパラメトリック表現の定義
まず、閉曲線を構成する点列を
として定義する

補間条件と連続性条件
三次スプライン補間では、各区間において次の条件を満たす必要がある。
まず、各区間の始点および終点において、曲線が与えられた点を正確に通過する条件を課す(式(4)、(5))。これにより、補間曲線は点列を忠実に再現する。
次に、隣接する区間の境界において、一次微分および二次微分が連続となる条件を課す(式(6)、(7))。これらの条件により、曲線の接線方向および曲率が滑らかに接続される。
さらに、閉曲線であることから、最終区間と最初の区間の境界においても、一次微分および二次微分の周期条件を課す(式(8)、(9))。これにより、曲線全体が滑らかに閉じることが保証される。
以上の条件を合わせることで、未知係数の総数と同数の方程式が得られる。
パラメータの正規化
条件式の変形
まず、補間条件(4)から、各区間の定数項は既知の点座標に等しくなることが分かる(式(11))。
これにより、未知係数は三次項・二次項・一次項の係数のみに限定される。
続いて、終点補間条件(5)を用いて、隣接点間の差分を三次多項式の係数で表現する式を導出する(式(12))。
さらに、一次微分の連続条件(6)を用いることで、隣接区間の係数間に成り立つ関係式が得られる(式(13))。
同様に、二次微分の連続条件(7)から、別の係数間の関係式を導出する(式(14))
閉曲線特有の周期条件(8)(9)についても同様に整理すると、終端区間と始端区間の係数を結ぶ条件式が得られる(式(15)、(16))。
行列方程式への整理
以上で得られた一連の条件式(11)(12)(13)(14)(15)(16)を整理すると、未知係数を成分とするベクトルに対する線形方程式系としてまとめることができる。これらをまとめて表したものが、行列方程式である(式(17))。
この行列方程式は、係数行列、未知係数ベクトル、および右辺ベクトルから構成される。
行列形式による解法
ここで(17)を係数行列を A、未知係数ベクトルを B、右辺ベクトルを X と定義すると、問題は単純な行列方程式の形に書き直される(式(18))。
(18)の係数行列 Aが正則であると仮定すれば、未知係数ベクトルは逆行列を用いて一意に求めることができる(式(19))。
まとめおよびy座標の場合の計算
Excel VBAでの実装
ここからは、前章までに導出した 閉曲線スプライン補間 を、Excel VBAで実際に動かす実装例を紹介します。
本記事では、利用シーンに応じて次の 2通りの実装方法 を用意しています。
ユーザー定義関数(UDF)として使う方法
VBAマクロとしてボタンから実行する方法
あらかじめ、この記事の内容をすべて確認できる 実行サンプル(Excelファイル) を用意しています。実際に動かしながら読むことで、処理の流れや使い分けが直感的に理解できる構成になっています。
実装パターン①:ユーザー定義関数として使う場合(スピル関数)
まずは、ユーザー定義関数として実装した例です。

以下の図は、SPLINE_Closed 関数を 通常のワークシート関数と同じ感覚で使用している例です。
X座標の一覧
Y座標の一覧
補間後に出力したい点数
これらを引数として渡すことで、補間された X・Y 座標の一覧がスピル関数として一括出力されます。

この関数はスピル関数として動作するため、1つのセルに数式を入力するだけで、結果が下方向に自動展開されます。
引数の意味
SPLINE_Closed 関数は、次の3つの引数を受け取ります。
X座標のセル範囲
Y座標のセル範囲
補間点数(整数)
X・Y の点列は、閉曲線を構成する元の点列であり、最初と最後の点を重複させる必要はありません。内部処理で「閉曲線」として扱われるように設計されています。
Excelのバージョンについて(重要)
この方法は スピル関数 を利用しています。そのため、以下のExcelバージョン以降が必要です。
Excel 2019
Excel 2021
Microsoft 365
古いExcel環境では、この方法は利用できません。その場合は、次に紹介する マクロ実行型の実装 を使用してください。
実装パターン②:VBAマクロとして実行する場合
次に、ユーザー定義関数を使わず、VBA内で処理する方法を紹介します。
ボタンから実行する構成
以下の図では、シート上のボタンに マクロを割り当てて処理を実行しています。
元となる X・Y 座標はシート上に配置
点数もセルで指定
ボタンをクリックすると、補間結果が指定範囲に出力される

この方法では、スピル関数を使わずに処理結果を出力できるため、古いExcel環境でも問題なく動作します。
マクロ実行型のメリット
Excel 2016 以前でも使用可能
出力位置を自由に制御できる
ボタン操作だけで完結するため、利用者に数式を見せなくて済む
業務用ツールや配布用ファイルでは、こちらの方式のほうが扱いやすいケースも多いです。
2つの実装方法の使い分け
実装方法 | 向いているケース |
ユーザー定義関数 | 数式感覚で使いたい / モダンExcel環境 |
VBAマクロ | 古いExcel対応 / 操作を単純化したい |
どちらも 内部で使用しているスプライン計算ロジックは同一です。用途や配布環境に応じて、使いやすい方法を選択してください。
ソースコード
ユーザー定義関数「SPLINE_Closed」および、VBA内処理「S_スプライン補間実行テスト」のソースコードを掲載しておきます。
上記でダウンロードできる実行サンプル内に記述してあるコードと同じですが、場面に応じて利用ください。
使用している汎用プロシージャは下記を参照ください
GetEndRow → https://www.softex-celware.com/post/getendrow
OutputCellArray2D → https://www.softex-celware.com/post/outputcellarray2d
TransposeN1toArray1D → https://www.softex-celware.com/post/transposen1toarray1d
UnionArray1D_LR → https://www.softex-celware.com/post/unionarray1d_lr


