【エクセルVBA】3次元空間内の3点がなす角度を一発算出する方法!

この記事では、以下の画像のように3つの点における座標(x,y,z)を指定するだけで、これらの点がなす角度を一発算出するVBAコードをご紹介していきます。

3点の座標からなす角を算出するという概要図

 

基本的には、B2セルからD4セルまでの座標を入力してマクロ実行するだけです。

非常に簡単なのでぜひご活用ください。

 

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

 

スポンサーリンク

VBAの実行環境を構築する

今回はVBAを使って計算していきます。

 

VBAをつかったことがない人は、まずは以下の記事を参考に環境の構築&実行方法の習得をしておきましょう。

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

 

スポンサーリンク

角度計算した座標を入力しておく

なす角を計算するうえで、まずは3点の座標がなければ始まりませんので、以下の画像を参考に計算した座標をそれぞれ入力しましょう。

3点の座標の指定方法

※今回はA点の座標を中心になす角を計算していきます。

順番を間違えると正しく計算できませんので注意しましょう。

 

以降のサンプルコードではこちらの画像の数値を使ってテスト計算してみようと思います。

 

※以降で紹介するVBAコードはこれらの情報がB2セルからD4セルまでに記述されていることを想定して書いています。

もし、記述場所を変更したい場合は以降のVBAコードも書き換えましょう。

 

スポンサーリンク

なす角算出に使用する公式

今回は高校数学でならった以下の内積の公式を使用してなす角を算出していきます。

なす角を算出する際に使用する内積の公式

基本的には、この数式の登場人物達を先ほど入力した情報をもとにゴリゴリ計算し、cosθを算出⇒θを算出、という流れを実行していくだけですね。

 

この公式を頭にいれておけば、以降のコードも理解しやすいはずです。

 

スポンサーリンク

指定座標からなす角を算出するVBAコード

それでは下準備が整ったところで、いよいよVBAコードの記述に入りましょう。

 

以下がそのサンプルコードです。

Sub angle()
    Dim Apos As Variant, Bpos As Variant, Cpos As Variant
    Dim ABvec(1, 3) As Variant, ACvec(1, 3) As Variant
    Dim inner As Single, normAB As Single, normAC As Single
    Dim costheta As Single, theta_rad As Single, theta_deg As Single
    '座標情報を取得
    Apos = Range("B2:D2")
    Bpos = Range("B3:D3")
    Cpos = Range("B4:D4")
    
    '内積の公式を計算
    inner = 0
    normAB = 0
    normAC = 0
    For i = 1 To 3
        ABvec(1, i) = Apos(1, i) - Bpos(1, i)
        ACvec(1, i) = Apos(1, i) - Cpos(1, i)
        inner = inner + ABvec(1, i) * ACvec(1, i)
        normAB = normAB + ABvec(1, i) * ABvec(1, i)
        normAC = normAC + ACvec(1, i) * ACvec(1, i)
    Next
    normAB = Sqr(normAB)
    normAC = Sqr(normAC)
    
    '角度計算
    costheta = inner / (normAB * normAC)
    theta_rad = WorksheetFunction.Acos(costheta)
    theta_deg = WorksheetFunction.Degrees(theta_rad)
    
    '結果出力
    MsgBox theta_deg & "deg"
    
End Sub

 

少し長いですが、ひとつひとつ読んでいけば先ほどの公式に数値を当てはめているだけ、ということが理解できるはずです。

 

こいつを実行すると以下の結果が出力されました。

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

 

問題なく計算できていそうですね。

 

スポンサーリンク

おわりに

というわけで今回は指定した3点からなす角を一発算出する方法をご紹介しました。

ぜひ状況に応じてご活用ください。

 

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

 

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

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

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

 

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

↓ 応援ボタン

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

それではまた!

コメント

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