【エクセルVBA】mapデータから二軸で線形補間して数値取得する方法

このページでは、mapデータの中から二軸で線形補間をして数値を取得する方法をご紹介していきます。

 

具体的には、以下の画像のようにエアコンの消費電力が設定温度と外気温によってどのように変化するのか、といったデータがあったとします。

設定温度は2度刻み、外気温は10度刻みになっていることがわかると思います。

この状態から軸上に数値がない、外気温ー5度&設定温度23度のときの消費電力を求めたい、という状況で活用できるスキルになります。

mapデータから指定した場所のデータを計算して取得するという作業の概要図

基本的にはmapの存在領域と、X軸、Y軸の数値をそれぞれ指定してあげるだけでOKです。

 

それではさっそくやっていきましょう。

 

スポンサーリンク

VBAの実行環境を構築しておく

今回はVBAを使って作業していきますので、まずはVBAの実行環境を構築しておく必要があります。

 

始めてVBAを使うという人は、まずは以下の記事を参考に環境構築を進めましょう。

エクセルマクロ(VBA)の始め方!初心者向けに画像を使って詳細解説

 

スポンサーリンク

データmapを準備する

今回は以下のようなデータmapを使用します。

(エアコンの消費電力をイメージして作ったものですが、数値は適当なのであてにしないでください。)

mapデータを準備した様子

のちほど紹介するプログラムでは、B2セルからH7セルまでをmapデータとしてして入力します。

あなたの使いたいmapがどのセルに配置されているのかを事前に確認しておきましょう。

 

スポンサーリンク

データの取得場所を指定&結果出力場所を用意する

今回は以下のようにデータ取得場所の指定&探索結果の出力場所を準備しました。

map内から数値取得したい場所を指定&結果出力場所を準備している様子

これらの場所ものちほど紹介するプログラム内で使用しますのでメモしておきましょう。

 

スポンサーリンク

mapデータから線形補間で数値取得するサンプルコード

事前準備が整ったところで、実際のコーディング作業に入っていきましょう。

 

以下が冒頭に紹介した作業を実施してくれるサンプルコードです。

Sub search_map()
    Dim mapdata As Variant
    Dim amb_temp, set_temp, v1, v2, v3 As Single
    Dim new_range As String
    Dim i, j As Integer
    'データ範囲、縦軸、横軸の数値を取得
    mapdata = Range("B2:H7")
    amb_temp = Range("K2")
    set_temp = Range("K3")
    '縦方向の該当場所を探索
    i = 2
    Do Until mapdata(i, 1) > set_temp
        i = i + 1
    Loop
    '横方向の該当場所を探索
    j = 2
    Do Until mapdata(1, j) > amb_temp
        j = j + 1
    Loop
    '該当場所で線形補間→欲しいデータを算出
    v1 = (mapdata(i, j) - mapdata(i - 1, j)) / (mapdata(i, 1) - mapdata(i - 1, 1)) * _
         (set_temp - mapdata(i - 1, 1)) + mapdata(i - 1, j)
    v2 = (mapdata(i, j - 1) - mapdata(i - 1, j - 1)) / (mapdata(i, 1) - mapdata(i - 1, 1)) * _
         (set_temp - mapdata(i - 1, 1)) + mapdata(i - 1, j - 1)
    v3 = (v1 - v2) / (mapdata(1, j) - mapdata(1, j - 1)) * (amb_temp - mapdata(1, j - 1)) + v2
    '結果をセルに出力する
    Range("K4") = v3
End Sub

 

結構長いですが、要所でコメントをつけておりますので、なんとなくやっていることは理解できるはずです。

要は、X軸、Y軸それぞれで線形補間を実施しているだけです。

 

スポンサーリンク

サンプルコードの実行結果の確認

いくつか数値を変えながら実行してみましょう。

まずは軸上にそのものの数値がある場合です。

サンプルコードの実行結果

問題なくそのものの数値を取得してくれていますね。

 

外気温、設定温度を変更して実行してみましょう。

サンプルコードの実行結果

それらしい数値になっていますね。

 

というわけで問題なく動くことが確認できましたね。

※当然ですが、このmapの外の数値を指定するとエラーになりますのでご注意ください。

 

スポンサーリンク

おわりに

というわけでエクセルVBAをつかってmapデータから指定した場所の数値を線形補間で計算して出力する方法をご紹介しました。

このようなmapデータは機械設計をしていると頻出しますので、ぜひそういった場面でご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました