Microsoft Excelで度分秒表示角の差を求める calculating the difference of DMS angles in Microsoft Excel
はじめに
Microsoft Excelで度分秒表示角の差を自力で求める手法を知るのは必ずしも簡単ではなかった。光波測距儀での水平角はDMSで求める。測量の後に結果をまとめる際には,水平角の偏角補正が必要となる。これまでは不器用にも,度,分,秒,個別に計算していた。日本では磁北が西偏しており,水平角は時計回りで求めるので,水平角の真北表示をする場合,読値から例えば7度40分などで,差し引くことになる。分計算をして,後に度計算をすることになるが,まあ,手計算に近い。
いま,droneで作成した3Dマップに光波測距結果を投影する作業をしているが,手作業では余りに寂しくて,Microsoft Excelでの関数計算を実施することにした。
1. 計算プロセス概観
図2と,図3(図2の計算式表示)では,Microsoft Excel計算過程の一部を示している。第29行の十進度(十進角,DD)は第30,31行でDMS形式に変換している。図1はウィキペディアのDDからDMSへの換算式で当方が考えたものと一致している。
しかしながら,何故か,カシオ計算サイトの結果とは秒部分で何故か多少合わない。
図4の計算結果とは,秒単位で,何故か,異なっている。
2. 計算式の説明
図2と図3を使って示す。B点に該当する光波測距儀の光軸回転DMSを第31行に示している。余弦定理を使って求めた。B点の光波測距儀の読値を第32行に示している。第31行マイナス第32行のDMS単位の計算を実行するべく,Microsoft Excelの関数を使用した。
2.1 concatでDMSデータの準備
concat関数の使用法については,CONCATENATE関数で顧客リストをスピード整理!文字と文字をつなげる便利な関数 を参考に。
B33(B34)とC33(C34)を比較すると,秒表示が異なるが,図3に見られるようにB33には,=concat(B32,”:”,C32,”:”,D32),という計算式が入っているためである。なお,Excel 2016以降,concatenate関数は簡略化かつバージョンアップされてconcat関数になったようで,従来のconcanenate(《コ》〔文字列などを〕連結させる)の代わりに今後はconcatを使うことにする。
2.2 減算結果がマイナスの場合は
第34行では,DMS形式のまま,減算できて,-03:25:07.0,が得られているが,DMSの計算は結果が正である必要があるので,工夫が必要だ。【エクセル時短】時間計算をしたら「######」に! マイナスの時間は3つの関数で表示できる に対処法が,次のように記されている。
引用開始 ————————————————
Excelで時間計算をしたとき、結果が「######」と表示された経験はありませんか? 例えば、ある業務の作業時間が、何らかの改善によって5分から3分に短縮されたとします。改善後と前を比較(引き算)したとき、-2分という結果を期待しますが、Excelでは正しく表示できません。これは、Excelの内部で時刻を表す数値が「シリアル値」として扱われているために起こります。
引用終了————————————————
セルB34マイナスC34を計算する場合,=TEXT(ABS(B34-C34),IF(C34>B34,”-hh:mm:ss.0″,”hh:mm:ss.0″)),という形にする(ss.0は小数点以下一桁を表示)。セルB34マイナスC34はマイナスなので,IF文の条件文 C34 > B34に該当するので,”-hh:mm:ss.0″が,実行される。正かゼロの場合は,通常の時間計算の”hh:mm:ss.0″が表示される。マイナスの場合,hh:mm:ss.0,にマイナス記号が付加されるのである。
なお,この「=TEXT(⋯⋯⋯⋯⋯)」が機能する場合としない場合があり,その理由がわからない。
3. 光波測量結果に
光波測量によるネットワークをdroneマップに投影する方法,の,5.2 新たなls_1の光軸回転角を求める,の図29で得られた光軸回転角 -02:53:53.6を使って,これまでの手作業ではなくて,自動?で計算式を埋め込みたいと思った。
図5は失敗例である。しかもF15:F21の計算で使用した光軸回転角が過っている。A14:C21のHR値は光波測量時の読み取り値である。それらから光軸回転角を差し引いてA15:A21の結果が得られて,この-hh:mm:ss.0値をDMSを一つのセルに分割すべく,メーンメニューの,データ > 区切り位置(:),の機能を使って実行するのであるが,G16:G21の選択域に示すように,うまく行かない。
試行錯誤しつつ,成功した。http://kiyopon.sakura.ne.jp/situmon/kaitou/index.htm の,
————————————————
2.角度の60進数を10進数に表示させる関数は?
例えば 30度45分20秒 と入力すると30.7555・・・と表示させる
60進数を10進数にするよりも次のようにすると簡単です。A1セルに30:45:20と入力した場合次の式を入れることで30.75555556と表示されます。=A1*24
————————————————
というアドバイスを使うことでクリアすることができた。その結果を図5に示す。
図5の赤字2’に示したのは,光軸回転角 -02:53:53.6,である。−での計算がMicrosoft Excelでは対応しないので,計算式中の$M$1の値は➕️にして,−は別途計算式で追加することにした。その計算式は図5下段のI15:I21の部分の部分である。列タイトルを「DMS ± 回転角」とすることで,このシート使用時で,お粗末ながら喚起している。思えばIF文で設定は可能であるが。まあ,赤線の3では,Loc. 6は,104度24分46.4秒となっていて,光波測量によるネットワークをdroneマップに投影する方法 の,「5.2 新たなls_1の光軸回転角を求める」,で得たDMSに幸い一致した。
これを含むK16:M21の範囲をコピー,そして,上段のG4:I9にテキストのみペーストした。赤線3’のように正しくコピペされている。この結果得られた直角座標値M4:N9の赤線4でのLoc. 6のXY値は,3Dマップに載せられたls_2星形区のLoc. 6と完全に一致したのである。
図6には図5の埋め込み計算式を表示している。赤線5’では,光波HRの読値のhh:mm:ss.0値から赤線5の|光軸回転角|をマイナスしている。赤線6では赤線5’の値に24を掛けて,後に,セル書式を数値に変えている。そして,赤枠7では,図1の計算式を埋め込んでいるのである。この赤枠7の領域をコピーして,赤枠7’のようにテキストペーストしている。
以上,Feb. 19, 2024記。
追記 Mar. 31, 2024:
光波HR読値のhh:mm:ss.0から,この値より大きい値を差し引く計算は,関数を記述しても,何故か,失敗することは多い。その確たる対策をここに示す。
角度 “hh:mm:ss.0” の差を取った場合,マイナス値になると,セルに「######」などと表示される。これを避けるべく,
=TEXT(ABS(H64-$N$1),IF($N$1>H64,”-hh:mm:ss.0″,”hh:mm:ss.0″))
とするが,これでも結果が,マイナス表示されず,12:37:19.2などとなる。-36:37:19.2であったが。
単位円を考えると,- 41º54’19.2″は,360º00’00.0″マイナス- 41º54’19.2″ = 318º05’40.8″と考えても問題無い筈だ。つまり,$N$1に,=”360:00:00.0″-P1,を入れても同じ筈だ。そう考えて,このシートを作成すると,成功した。トータルが360ºを超えても,三角関数の計算には問題が無いので,形に拘る必要性はない。差の計算を和の計算にするのはいいアイデアだと我ながら思う。
以上