スプライン補間をExcel関数で実装する方法と金属加工現場での活用
Excelにスプライン補間の標準関数は存在せず、折れ線補間のまま使い続けると加工精度に直結する誤差が生じます。
スプライン補間とExcel関数の基礎知識:金属加工で必要な理由
まず、スプライン補間がどのような技術なのかを整理しましょう。
スプライン(Spline)とは、もともと造船や航空機設計の現場で使われていた「薄い弾性のある定規」の名称です。設計者が曲線を描くときに複数の点にあてがい、自然なしなりを利用して滑らかな曲線を引く道具でした。数学的な「スプライン補間」は、この物理的なスプラインの振る舞いを方程式で表現したものです。
金属加工の現場に置き換えると、寸法測定で得られた数十点のデータをもとに「その間の形状はどうなっているか」を推測する場面がこれにあたります。旋盤加工した丸棒の断面プロファイル、プレスの曲げ加工後の板厚変化、熱処理後の硬度分布といったデータは、全区間を測定することが困難なため補間が不可欠です。
ここで重要なのが、Excelには「スプライン補間」という名前の標準関数が存在しないという事実です。これは意外に知られていません。Excel上で使える補間関連の標準関数は `FORECAST.LINEAR`(線形補間・回帰)や `TREND`(回帰傾向線)が代表的ですが、これらは直線をベースにした補間であり、曲面や曲線形状を含む金属加工データには向いていません。
| 補間手法 | Excel標準関数 | 曲線の滑らかさ | データ点の通過 |
|---|---|---|---|
| 線形補間 | FORECAST.LINEAR | 折れ線(不滑らか) | ✅ 通過する |
| 多項式回帰 | TREND / LINEST | 滑らか(外挿あり) | ❌ 必ずしも通過しない |
| 3次スプライン補間 | ❌ 標準関数なし | ✅ 滑らか(C²連続) | ✅ 通過する |
つまり、金属加工現場で使いたいスプライン補間は「VBAでユーザー定義関数を作る」か「外部ツールを使う」しか選択肢がありません。これが基本です。
「折れ線でもいいじゃないか」と思うかもしれません。しかし、折れ線補間は各測定点間を直線でつないでいるため、接続点(データ点)の前後で傾きが急変します。機械加工のNCデータにこの折れ線座標を渡してしまうと、工具が方向を急変する箇所で加速度が不連続になり、仕上げ面粗さが悪化したり、工具に衝撃がかかったりします。スプライン補間なら、接続点での傾き(1階微分)と曲がり具合(2階微分)が左右で一致するため、滑らかな加工パスが生成されます。
スプライン補間が基本です。
参考:3次スプライン補間の数学的条件を詳しく解説している記事(Qiita)
3次スプライン補間のExcel VBA実装:ユーザー定義関数の作り方
Excel上でスプライン補間を行うには、VBAを使ってユーザー定義関数(UDF)を作成するのが現実的な方法です。
3次スプライン補間では、n+1個のデータ点 (x₀,y₀), (x₁,y₁), …, (xₙ,yₙ) が与えられたとき、各区間 xᵢ₋₁, xᵢ を以下の3次式で近似します。
“`
Pᵢ(x) = C1ᵢ + C2ᵢ(x – xᵢ₋₁) + C3ᵢ(x – xᵢ₋₁)² + C4ᵢ(x – xᵢ₋₁)³
“`
各係数は、次の4つの条件を同時に満たすように行列方程式を解いて求めます。
- 条件①(値の連続性): 各データ点で左右の関数値が一致し、かつ実測値と一致する
- 条件②(1階微分の連続性): 各データ点で左右の接線の傾きが一致する(折れ曲がりがない)
- 条件③(2階微分の連続性): 各データ点で左右の曲率が一致する(曲がり方が滑らかに変化)
- 条件④(境界条件): 両端データ点での2階微分を0とする(自然スプライン)
これらを満たす係数を求めるコードの骨格は以下のようになります。
“`vb
Function F_SPLINE(xRange As Range, yRange As Range, xQuery As Double) As Double
Dim n As Integer
Dim i As Integer
n = xRange.Rows.Count – 1
Dim x() As Double, y() As Double
ReDim x(n), y(n)
For i = 0 To n
x(i) = xRange.Cells(i + 1, 1).Value
y(i) = yRange.Cells(i + 1, 1).Value
Next i
‘ 行列 A, b を構築して三重対角行列を解く(TDMA法)
Dim h() As Double, alpha() As Double
Dim c() As Double ‘ 2階微分係数
ReDim h(n – 1), alpha(n), c(n)
For i = 0 To n – 1
h(i) = x(i + 1) – x(i)
Next i
‘ ここで三重対角行列を解いて c(i) を求める
‘ — 省略(TDMA法またはLU分解を使用)—
‘ 区間を特定して補間値を返す
For i = 0 To n – 1
If xQuery >= x(i) And xQuery <= x(i + 1) Then
Dim t As Double
t = xQuery – x(i)
Dim b As Double, d As Double
b = (y(i + 1) – y(i)) / h(i) – h(i) * (2 * c(i) + c(i + 1)) / 3
d = (c(i + 1) – c(i)) / (3 * h(i))
F_SPLINE = y(i) + b * t + c(i) * t ^ 2 + d * t ^ 3
Exit Function
End If
Next i
End Function
“`
このUDFをワークシートから呼び出すには、セルに `=F_SPLINE(A2:A10, B2:B10, C2)` と入力するだけです。これは使えそうです。
行列計算部分は「三重対角行列アルゴリズム(TDMA法)」で解くのが標準的な実装です。TDMA法は通常のガウス消去法に比べて計算ステップ数が大幅に少なく、データ点数が20〜50点の金属加工測定データでもほぼ瞬時に結果が出ます。計算の速さが条件です。
一方、もし使うデータ点数が200点を超えるような大規模データ(例:CNCの多点計測ログなど)の場合、行列の次元数が大きくなりすぎてVBAでは処理が重くなります。このケースでは「高速スプライン補間」と呼ばれる手法、つまり補間対象の点を5〜7点単位に分割して個別に処理する方式が有効です。分割点数を5以上に設定すれば、通常の3次スプライン補間との結果の差は実用上ほぼ生じません。
参考:Excel VBAでのスプライン補間UDFの実装事例(製造業・CAD前処理向け)
Excelだけでスプライン補間を実現 — Softex Celware
スプライン補間のExcelでの使い方:測定データ入力からグラフ出力まで
VBAでUDFが完成したら、実際の使い方の流れを確認しましょう。
【手順1】測定データをExcelシートに入力する
A列にX値(例:測定位置mm)、B列にY値(例:硬度HRC、板厚mm、粗さRa等)を並べます。データ点は最低4点以上が推奨です。3点以下では3次スプライン特有の「滑らかさ」が活きません。
| A列(位置 mm) | B列(硬度 HRC) |
|---|---|
| 0 | 58.2 |
| 10 | 55.1 |
| 25 | 52.8 |
| 40 | 49.3 |
| 50 | 47.0 |
【手順2】補間したい位置をD列に並べる
たとえばD列に 0, 1, 2, 3, … 50 のように等間隔で入力しておきます。
【手順3】E列にUDFを入力して補間値を取得する
E2セルに `=F_SPLINE($A$2:$A$6, $B$2:$B$6, D2)` と入力し、D列全体に対してコピーします。
【手順4】散布図を作成する
D列とE列を選択し、散布図(折れ線なし)を挿入します。測定点と滑らかな補間曲線が重なったグラフができます。報告書のグラフが一段と見栄えよくなります。
ここで注意すべき点があります。スプライン補間はデータ点を必ず通過しますが、「外挿」(データ範囲の外を推定すること)は得意ではありません。最初のデータ点より前、または最後のデータ点より後の値を求めようとすると、曲線が大きく振れる「ランジュ現象」に似た挙動が起きることがあります。金属加工データの解析では、補間はデータ範囲の内側でのみ使う、が原則です。
また、X値は必ず単調増加(左から右に値が増え続ける)である必要があります。測定順に並べたデータが途中で折り返している(往復測定など)場合は、そのままでは補間関数が正しく動作しません。このようなケースには「パラメトリックスプライン補間」という手法が対応しています。X, Y それぞれを独立した媒介変数 t の関数として補間することで、折り返しや閉曲線にも対応できます。
つまりデータの性質で手法を選ぶことが条件です。
参考:3次スプライン補間の係数計算と自然スプライン境界条件の解説
エクセルを用いたスプライン補間法による近似曲線 — godfoot
線形補間との誤差比較:金属加工データで差が出る具体的なケース
「折れ線補間(線形補間)とスプライン補間は、実際にどれくらい結果が違うのか」という疑問は当然です。
結論から言えば、測定点が密(間隔5mm以下など)な場合は両者の差はほとんど無視できます。差が明確に出るのは、測定点が疎らで、かつ形状に曲率の変化がある場合です。金属加工での具体例を挙げます。
例①:曲げ加工後のスプリングバック角度分布
材料の弾性回復量(スプリングバック量)は加工位置によって非線形に変化します。5カ所しか計測できない状況で「10mm刻みの連続分布」が必要な場合、折れ線補間では最大3〜5°の角度誤差が発生することがあります。スプライン補間ではこれが1°以下に抑えられるケースが報告されています。3〜5°の誤差は、累積すると製品公差を外れる原因になります。
例②:工具摩耗の進行を時系列補間するケース
切削加工中の工具摩耗データを1時間おきに5回計測し、その間の任意時刻での摩耗量を推定したい場面があります。折れ線補間では「30分後」の推定値が前後の単純な中間値しか出せません。スプライン補間なら摩耗進行の曲率(加速度的な変化)を反映した推定が可能で、工具交換タイミングの精度が上がります。
例③:熱処理後の硬度プロファイル補間
焼き入れ処理後の硬度分布を端面から10点計測し、グラフにする場合、折れ線グラフは報告書として見映えが悪く、なおかつ「実際の分布は折れ線ではない」という説明責任も生じます。スプライン補間を使うと滑らかな分布曲線になり、客観的な根拠として使いやすくなります。これは使えますね。
逆に、スプライン補間が向かないケースも押さえておく必要があります。データに急激なステップ変化(切り欠き形状の端部など)が含まれる場合、スプライン補間は無理やり滑らかにつなごうとして補間曲線に「波打ち」が生じます。このような不連続点を含む形状データは、区間を意図的に分けて個別に補間するか、そもそも補間を行わない方が安全です。
パラメトリックスプライン補間:金属加工の閉曲線・複雑形状への応用(独自視点)
金属加工の現場では、円形や楕円形、S字カーブといった「閉じた曲線」や「X値が単調増加でない複雑形状」を扱う機会があります。
通常の3次スプライン補間は「y = f(x)」の形、つまりX値に対して一意にY値が決まる関係でのみ機能します。しかし加工部品の輪郭形状を座標データで取得すると、たとえば左右対称な円弧では同じX値に対してY値が2つ存在します。通常のスプライン補間ではこのデータを正しく処理できません。
この課題を解決するのがパラメトリックスプライン補間です。X座標とY座標の両方を、それぞれ独立した媒介変数 t の関数 X(t)、Y(t) として扱います。t は各点間の距離(弦長)を累積した「経路長パラメータ」を使うのが一般的です。
“`vb
‘ パラメトリックスプライン補間の考え方(概念コード)
‘ 各点間のユークリッド距離を t パラメータとして累積する
For i = 1 To n
t(i) = t(i-1) + Sqr((x(i)-x(i-1))^2 + (y(i)-y(i-1))^2)
Next i
‘ X(t) と Y(t) をそれぞれ独立にスプライン補間する
‘ → X_spline(t), Y_spline(t) を計算
“`
この手法を使うと、金属部品の輪郭座標(外周測定データ)から滑らかなDXF輪郭データを生成し、CADに読み込んで設計図と比較するといった使い方ができます。NCプログラムの座標点群生成にも活用できます。従来はMATLABやPythonでしか実現できなかった処理がExcelだけで完結するのは、インストール制限が多い製造現場では大きなメリットです。
実際に閉曲線のスプライン補間をVBAで実装するには、最後のデータ点と最初のデータ点が滑らかにつながるよう境界条件を「周期境界条件(Periodic Boundary Condition)」に変更する必要があります。これは自然スプラインの境界条件とは異なる設定です。周期境界条件が条件です。
閉曲線対応の補間は、たとえばパイプ断面の真円度評価や、プレス金型の刃先輪郭管理などに直結します。測定機で取得した数十点の輪郭座標をスプライン補間してCADデータと重ね合わせることで、型の摩耗や変形を視覚的かつ定量的に把握できます。これまで「目で見て判断」していた作業が、Excelベースで数値化・グラフ化できる点は見落とせません。
参考:パラメトリックスプライン補間と閉曲線補間のVBA実装を詳しく解説
三次スプライン補間の導出及びExcel VBAでの実装 — Softex Celware
スプライン補間のExcel関数化で作業時間を短縮するための実践ポイント
スプライン補間をExcelに組み込んで日常業務で使いこなすための、具体的なポイントをまとめます。
まず「UDFの保管場所」の問題があります。通常、VBAマクロは `.xlsm`(マクロ有効ブック)に保存されますが、このファイルを複数人で共有する場合、セキュリティ設定によってマクロが無効化されてしまうリスクがあります。これを避けるには、UDFをExcelの「個人用マクロブック(PERSONAL.XLSB)」に保存することで、そのPC上のすべてのブックから `=F_SPLINE(…)` を呼び出せるようになります。PCを使う本人専用のツールとして管理するのが現実的です。
🔧 セキュリティ対策として有効な設定
- マクロのセキュリティレベルを「すべてのマクロを有効にする(個人用設定)」に変更
- 社内共有ファイルには UDF の呼び出し結果を「値として貼り付け」して保存する
- Excelのアドイン(.xlam形式)として配布すれば、他の社員も使いやすくなる
次に、「補間対象データの前処理」が重要です。現場の測定データには外れ値(測定ミスや異常値)が混入することがあります。スプライン補間はすべてのデータ点を通過するため、外れ値があると補間曲線がその点で大きく歪んでしまいます。まずデータを折れ線グラフで目視確認し、明らかな外れ値を除去または修正してからスプライン補間を適用するのが鉄則です。外れ値に注意すれば大丈夫です。
🔍 外れ値チェックの簡易フロー
- A列・B列のデータを選択して折れ線グラフを作成する
- 他の点から大きく外れている点を目視で確認する
- その点が測定ミスであれば削除、異常現象の記録であれば別途注記する
- クリーニング後のデータでスプライン補間を実施する
さらに、補間分割数の設定にも注意が必要です。UDFに「補間後の点数(分割数)」を引数として持たせる設計にしておくと、用途に応じて解像度を変更できます。たとえばCAD貼り付け用なら100分割、報告書グラフ用なら20分割といった使い分けが可能です。分割数が多いほど滑らかに見えますが、50分割を超えると視覚的な差はほとんどなくなります。50分割が目安です。
最後に、ExcelのVBAでスプライン補間を自力実装するのが難しいと感じる場合は、外部アドインや既製のVBAサンプルブックを活用する方法もあります。製造業・設備設計向けに開発されたExcel VBAのスプライン補間UDFは、GitHubや専門ブログでも公開されており、無料で使えるものも存在します。ただし社内PCへの外部ファイル導入には、情報システム部門への確認が必要な場合があります。コード内容をレビューしてから使うことが、現場でのトラブルを防ぐうえで不可欠です。
💡 活用場面のまとめ
| 活用場面 | スプライン補間の使い方 | 期待できるメリット |
|---|---|---|
| 品質記録グラフ | 測定データを滑らかな曲線で可視化 | 報告書の品質向上・説得力アップ |
| CAD前処理 | 座標点群をスプライン補間してDXF化 | CAD作業時間の大幅短縮 |
| 工具寿命管理 | 摩耗データの時系列補間と予測 | 工具交換タイミングの最適化 |
| 硬度・板厚分布 | 少ない測定点から連続分布を推定 | 検査コストの削減 |
| NCパス生成 | 不連続な指令点を滑らかなパスに変換 | 仕上げ面粗さの改善 |
参考:大規模データにも対応する高速スプライン補間VBAの詳細実装