エクセルマクロ(Excel VBA)で積分(台形則)を行う
はじめに
エクセルで積分を行う必要があったので、マクロを作成しました。
範囲を指定するだけで簡単に面積を求めることができます。
実験で測定した値をエクセルで分析する際に、素早く積分するために作成しました。
積分は台形則で行っていますが、シンプソン則等他のアルゴリズムに拡張することも可能なように作成しています。
関数の仕様
関数名:Area(範囲x, 範囲y)
引数:
範囲x: データの範囲(X)
範囲y: データの範囲(Y)
ソース
数値積分.bas
Option Explicit
Function Area(範囲x As Range, 範囲y As Range) As Variant
' yとxのデータは同じ個数であることが前提
If 範囲x.Count <> 範囲y.Count Then
' xとyでデータ個数が異なる場合はN/Aを返す
Area = CVErr(xlErrNA)
Exit Function
End If
' 生データの個数を代入
Dim DataNum As Long
DataNum = 範囲y.Count
' ループ関数を定義
Dim i As Long
Dim j As Long
' Rangeデータを配列に保存
Dim Xdatas() As Double
ReDim Xdatas(範囲x.Count)
Dim Ydatas() As Double
ReDim Ydatas(範囲y.Count)
For i = 1 To 範囲x.Count
Xdatas(i) = 範囲x(i)
Ydatas(i) = 範囲y(i)
Next
' ソートを行う
Dim BufDouble As Double
For i = 1 To UBound(Xdatas)
For j = 1 To UBound(Xdatas)
If Xdatas(i) < Xdatas(j) Then
BufDouble = Xdatas(i)
Xdatas(i) = Xdatas(j)
Xdatas(j) = BufDouble
BufDouble = Ydatas(i)
Ydatas(i) = Ydatas(j)
Ydatas(j) = BufDouble
End If
Next
Next
' 積分を行う
i = 1
Area = 0#
While i < 範囲x.Count
Area = Area + (Xdatas(i) + Xdatas(i + 1)) * (Ydatas(i + 1) - Ydatas(i)) / 2
i = i + 1
Wend
End Function