このページでは、mapデータの中から二軸で線形補間をして数値を取得する方法をご紹介していきます。
具体的には、以下の画像のようにエアコンの消費電力が設定温度と外気温によってどのように変化するのか、といったデータがあったとします。
設定温度は2度刻み、外気温は10度刻みになっていることがわかると思います。
この状態から軸上に数値がない、外気温ー5度&設定温度23度のときの消費電力を求めたい、という状況で活用できるスキルになります。
基本的にはmapの存在領域と、X軸、Y軸の数値をそれぞれ指定してあげるだけでOKです。
それではさっそくやっていきましょう。
VBAの実行環境を構築しておく
今回はVBAを使って作業していきますので、まずはVBAの実行環境を構築しておく必要があります。
始めてVBAを使うという人は、まずは以下の記事を参考に環境構築を進めましょう。
エクセルマクロ(VBA)の始め方!初心者向けに画像を使って詳細解説
データmapを準備する
今回は以下のようなデータmapを使用します。
(エアコンの消費電力をイメージして作ったものですが、数値は適当なのであてにしないでください。)
のちほど紹介するプログラムでは、B2セルからH7セルまでをmapデータとしてして入力します。
あなたの使いたいmapがどのセルに配置されているのかを事前に確認しておきましょう。
データの取得場所を指定&結果出力場所を用意する
今回は以下のようにデータ取得場所の指定&探索結果の出力場所を準備しました。
これらの場所ものちほど紹介するプログラム内で使用しますのでメモしておきましょう。
mapデータから線形補間で数値取得するサンプルコード
事前準備が整ったところで、実際のコーディング作業に入っていきましょう。
以下が冒頭に紹介した作業を実施してくれるサンプルコードです。
Sub search_map()
Dim mapdata As Variant
Dim amb_temp As Single, set_temp As Single
Dim v1 As Single, v2 As Single, v3 As Single
Dim new_range As String
Dim i As Integer, 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データは機械設計をしていると頻出しますので、ぜひそういった場面でご活用ください。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント