top of page

​タグ一覧

配列処理(73)

階層化フォーム(33)

ファイル操作(28)

開発事例(22)

シート・セル操作(20)

図形操作(15)

ユーザーフォーム(10)

コード自動生成(10)

設計思想(10)

講座実施報告(10)

文字列操作(8)

数学(7)

開発効率化(6)

GAS(5)

アニメーション(5)

技術解説(4)

イミディエイトウィンドウ(4)

Googleスプレッドシート(4)

副業(4)

クリップボード(4)

条件付き書式(4)

その他(4)

OneDrive(3)

イベントプロシージャ(3)

ココナラ(3)

小説(3)

HTML(3)

JavaScript(3)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

介護(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

罫線(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

Antigravity(2)

ステータスバー(1)

コード解析(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

溶接ロボット(1)

保育士(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

放課後等デイサービス(1)

児童福祉支援(1)

学校(1)

UI(1)

CAD(1)

カーソル操作(1)

チェックボックス(1)

Webアプリ(1)

PowerShell(1)

閉曲線のスプライン補間|数式導出からExcel VBAで実装まで

更新日:4 日前

閉曲線のスプライン補間|数式導出からExcel VBAで実装まで

今回の記事では、閉曲線のスプライン補間について解説していきます。数式の導出から始め、最終的には 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通りの実装方法 を用意しています。

  1. ユーザー定義関数(UDF)として使う方法

  2. VBAマクロとしてボタンから実行する方法


あらかじめ、この記事の内容をすべて確認できる 実行サンプル(Excelファイル) を用意しています。実際に動かしながら読むことで、処理の流れや使い分けが直感的に理解できる構成になっています。


実装パターン①:ユーザー定義関数として使う場合(スピル関数)


まずは、ユーザー定義関数として実装した例です。


ユーザー定義関数 SPLINE_Closed の利用イメージ
ユーザー定義関数 SPLINE_Closed の利用イメージ


以下の図は、SPLINE_Closed 関数を 通常のワークシート関数と同じ感覚で使用している例です。

  • X座標の一覧

  • Y座標の一覧

  • 補間後に出力したい点数


これらを引数として渡すことで、補間された X・Y 座標の一覧がスピル関数として一括出力されます。


SPLINE_Closed 関数の使い方
SPLINE_Closed 関数の使い方

この関数はスピル関数として動作するため、1つのセルに数式を入力するだけで、結果が下方向に自動展開されます。


引数の意味

SPLINE_Closed 関数は、次の3つの引数を受け取ります。

  • X座標のセル範囲

  • Y座標のセル範囲

  • 補間点数(整数)


X・Y の点列は、閉曲線を構成する元の点列であり、最初と最後の点を重複させる必要はありません。内部処理で「閉曲線」として扱われるように設計されています。


Excelのバージョンについて(重要)

この方法は スピル関数 を利用しています。そのため、以下のExcelバージョン以降が必要です。

  • Excel 2019

  • Excel 2021

  • Microsoft 365

古いExcel環境では、この方法は利用できません。その場合は、次に紹介する マクロ実行型の実装 を使用してください。



実装パターン②:VBAマクロとして実行する場合

次に、ユーザー定義関数を使わず、VBA内で処理する方法を紹介します。


ボタンから実行する構成

以下の図では、シート上のボタンに マクロを割り当てて処理を実行しています。

  • 元となる X・Y 座標はシート上に配置

  • 点数もセルで指定

  • ボタンをクリックすると、補間結果が指定範囲に出力される


VBA内処理の例
VBA内処理の例

この方法では、スピル関数を使わずに処理結果を出力できるため、古いExcel環境でも問題なく動作します。


マクロ実行型のメリット

  • Excel 2016 以前でも使用可能

  • 出力位置を自由に制御できる

  • ボタン操作だけで完結するため、利用者に数式を見せなくて済む


業務用ツールや配布用ファイルでは、こちらの方式のほうが扱いやすいケースも多いです。



2つの実装方法の使い分け

実装方法

向いているケース

ユーザー定義関数

数式感覚で使いたい / モダンExcel環境

VBAマクロ

古いExcel対応 / 操作を単純化したい

どちらも 内部で使用しているスプライン計算ロジックは同一です。用途や配布環境に応じて、使いやすい方法を選択してください。


ソースコード

ユーザー定義関数「SPLINE_Closed」および、VBA内処理「S_スプライン補間実行テスト」のソースコードを掲載しておきます。

上記でダウンロードできる実行サンプル内に記述してあるコードと同じですが、場面に応じて利用ください。


使用している汎用プロシージャは下記を参照ください


ユーザー定義関数「SPLINE_Closed」


VBA内処理(S_スプライン補間実行テスト)


Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

Softex-Celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page