【2通りの方法で!】あらゆる画像の面積をExcelで計算する方法をわかりやすく
画像の面積を求められると嬉しいこと
- 倉庫内のフォークリフト用通路の合計面積を知りたい
- 倉庫敷地内にあるいびつな形をした緑地エリアの合計面積を知りたい
- いびつな形をした会議室の面積を知りたい
等と思ったことはありませんか?
そのエリアが長方形であれば、縦と横の長さを測れば面積を計算できますが、いびつな形をしたエリアの面積を計算するのは難しいですよね。
また、そのエリアが広くなれば採寸することすら難しくなります。
このような時、レイアウト図や地図等の画像から面積を求められれば楽ですね。
数学を少し応用すれば、そのような芸当ができてしまうのです。
いびつな形をした画像というのは頂点の数がもの凄く多い多角形に近似できるので、任意の多角形の面積を求める問題に帰着します。
頂点の座標さえ分かれば、どんな多角形の面積でも求められます。
えっ?そんなに沢山ある頂点の座標を全部調べるなんて無理?
大丈夫です。
Excel VBAのたった9行のコードで自動取得できます。
今回は新宿御苑の面積を、地図情報からExcelを使った2通りの方法で求めてみました。
多角形の面積を求める2つの方法
まずは簡単な例として、下図のような四角形の面積を2つの方法で求めてみましょう。
台形の面積から求める方法
台形の面積は(上辺+下辺)×高さ÷2で求められますね。
一つ目の方法は、この四角形を台形に分解する方法です。
四角形の頂点に①~④の番号を振ると、①~②の辺とx軸で囲まれる台形は次のようになります。
ここで頂点①の座標を(x1、y1)、頂点②のそれを(x2、y2)とすると、この台形の面積は次のように計算できます。
(上辺+下辺)×高さ÷2
=(y1+y2)×(x1-x2)÷2
同様に②~③の辺とx軸で囲まれる台形の面積は、次のようになります。
(上辺+下辺)×高さ÷2
=(y2+y3)×(x2-x3)÷2
ここで、②のx座標は③のx座標より小さいので、x2-x3は負の数になりますね。
従って台形の面積は負になるため、図では区別するために水色で塗りつぶしてあります。
同様に③~④の辺とx軸で囲まれる台形と、④から①の辺とx軸で囲まれる台形を描くと次のようになります。
正の面積の台形と負の面積の台形が2つずつできますね。
これらを足し合わせていってみましょう。
まず、最初の台形と2番目の台形を足し合わせると、最初の台形が削られて次のようになります。
次に3番目の台形を足し合わせると、次のようになります。
最後にこれから4番目の台形を削り取ると、次のように元の図形になります。
つまり、4つの台形の面積を足し合わせると、元の図形の面積が求まります。
(y1+y2)×(x1-x2)÷2
+(y2+y3)×(x2-x3)÷2
+(y3+y4)×(x3-x4)÷2
+(y4+y1)×(x4-x1)÷2
=四角形の面積
外積を利用して求める方法
2つのベクトルがある時、その2つのベクトルで作られる平行四辺形の面積は、2つのベクトルの外積の大きさに等しくなります。
そして、2つのベクトルをそれぞれ(x1,y1)、(x2,y2)とする時、外積の大きさはx1y2-y1x2で計算できます。
また外積には向きがあり、反時計回りの方向で計算すると値が正に、時計周りの方向だと負になる性質があります。
この性質を使うと、先ほどの四角形の面積を求めることができます。
まず、頂点①、②と原点で囲まれる三角形の面積は、ベクトル①とベクトル②でできる平行四辺形の半分なので、次のように計算できます。
また①から②の向きに外積を計算したとすると、反時計周りなので符号は正です。
同様にして頂点②、③と原点で囲まれる三角形の面積も計算できますが、ベクトル②から③へは時計周りなので外積の符号は負になります。
従って、差し引きの図形の面積は次のようになります。
同様に頂点③、④と原点で囲まれる部分の面積を外積で求めると、符号は負で次のようになります。
そして、差し引きは次のようになります。
最後に頂点①、④と原点で囲まれる部分の面積を外積で計算すると符号は正になり、次のようになります。
そして差し引きは次のようになり、元の四角形になります。
つまり、頂点①⇒②、②⇒③、③⇒④、④⇒①の外積の半分を足し合わせれば、四角形の面積が求まります。
x1y2-y1x2÷2
+ x2y3-y2x3÷2
+ x3y4-y3x4÷2
+ x4y1-y4x1÷2
=四角形の面積
新宿御苑の面積を画像からExcelで計算してみよう
以上説明した2つの方法は四角形だけでなく、一般的な多角形の面積を求める時にも使えます。
各頂点の座標さえ分かれば、頂点が何千個あるような多角形でも同じように計算できます。
新宿御苑の外周を多角形で表す
そこで、ますは新宿御苑を多角形にします。
そのために新宿御苑の地図をExcelシートにコピペしてきて、外周をフリーフォームでなぞってみましょう。
(C.H.SのIROIROサイト|新宿御苑 から抜粋)
挿入⇒図形⇒フリーフォーム:図形
すると次のような図形ができます。
いびつな形をしていますが、これは頂点が数千個もある多角形です。
各頂点の座標をExcel VBAで求める
次に、各頂点の座標を求めます。
これにはVBAを使います。
とはいっても、下記の短いコードを実行するだけです。
Sub test()
Dim S As Shape
Dim i As Long
Set S = ActiveSheet.Shapes(1)
For i = 1 To S.Nodes.Count
With S.Nodes(i)
Cells(i + 1, 1).Value = .Points(1, 1)
Cells(i + 1, 2).Value = .Points(1, 2)
End With
Next i
End Sub
これを多角形を置いたシート上で実行させれば、A列に各頂点のx座標が、B列にはy座標が表示されます。
開発⇒マクロ
実行すると、
と、このように各頂点のx、y座標を得ることができます。
2通りの方法で面積を計算する
台形の面積から計算する方法
得られた座標から、まずは台形の面積を求める方法で新宿御苑の面積を求めてみましょう。
次のように各頂点の座標の横に台形の面積の計算式を入力して、すべての頂点についてコピペします。
すると、それらの合計値が多角形の面積です。
このように求まりましたが、単位はm2ではありません。
Excel独自の単位であるポイントになっています。
従って、このポイントをまずはメートルに換算してみましょう。
そのために、地図の中にあるスケールバーを利用します。
このスケールバーをピッタリとカバーするように、フリーフォームで多角形を作ります。
そして、先ほどと同じように、この多角形の頂点をVBAで書き出します。
するとA列に各頂点のx座標が表示されるので、その中の最大値と最小値を求めます。
この差がスケールバーの横の長さ、つまり200mをポイント単位で表した長さです。
計算してみると次のようになり、120.0109です。
そして、これが実際には200mなので、1ポイントは200÷120.0109=1.666515mということになります。
従って、先ほど計算した新宿御苑の面積211,017.4は、
211,017.4×1.666515×1.666515=586,052m2
とm2に換算できます。
なぜ1.666515を2回掛けたかというと、面積の次元はmの二乗だからです。
このように新宿御苑の面積は約58.6万m2と計算できました。
公式情報では約58.3万m2といわれているため、ほぼ一致しましたね。
外積から計算する方法
次に、外積を使って計算する方法で求めてみましょう。
各頂点のx、y座標の横に、次のように外積の1/2を計算する式を入力します。
これらの外積の合計を計算すると、211,017.4ポイント2になります。
1ポイントは1.666515ですので、これに1.666515の二乗を掛けると、約58.6万m2になりました。
これは先ほどの計算結果と同じです。
まとめ
どんな形をした画像であっても、その周りをExcelのフリーフォームでなぞれば頂点が無数にある多角形になります。
そして、その無数の頂点の座標は、ほんの9行のコードを書くだけでVBAにより自動的にExcelシートに書き出してくれます。
このようにして、頂点の座標がすべてわかっている多角形ができます。
すると、その面積は2通りの方法で求めることができます。
一つは多角形を頂点の数だけ台形に分解する方法です。
台形の面積は簡単に求められますので、それらの合計値を取れば多角形の面積が求まります。
もう一つは、ベクトルの外積を利用する方法です。
外積も各頂点の座標が分かっていれば簡単に計算できますので、それらの合計値を取れば多角形の面積が求まります。
計算される合意値は単位がExcel特有のポイント2になっていますが、地図の縮尺からm2に換算することができます。
以上のようにして、任意のフリーハンドの図形の面積を求めることができます。
なお、図形の式が分かっている場合には積分の数値計算で求めることができます。
【積分を数値的解法で解く】Excelで複雑な関数の積分を簡単に計算する方法
モンテカルロ法で円周率πと任意の図形の面積を求める方法をExcelで実演!