LoginSignup
1
1

More than 3 years have passed since last update.

エクセルマクロ(Excel VBA)で積分(台形則)を行う

Last updated at Posted at 2019-04-30

エクセルマクロ(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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1