システムwiki

DMS表現を用いた角度計算(アルゴリズム内の変換)

JayKay1 受付中 最終更新日:2021-06-14 11:34

私はExcelで次のことが可能であるか、または私は次のような制限がありませんでした.入力要件:-1つの小数点を使用してユーザーが入力したDMSベアリング/角度値ユーザーが別のセルをクリックすると、セル(例32.2513).値表現と計算要件(関数またはマクロ):1.セルに示されているDMS(32°25 '13 ")は計算のための10進表現に戻されます.
2.DMS値は計算のために連結され、それぞれのDD値に変換されます(32.420278).
3.DDまたはラジアン変換値を使用して、値の数学的操作のためにコードが書き込まれます.
4.DMS出力(シングルセルDMS表現)に変換された最終計算DDまたはラジアン値.推論:空間科学業界のExcelユーザーが正しい形式で表される値を持つことを可能にする(より直感的な)そして考えるべきことが少ない).
手動入力と変換なしでHP50G計算機を使用するのと同様です.

返信リスト(回答:3)

3 #
Andreas

1つのセルのみを使用することは、エラーチェックのために少し複雑です(例えば、1°23を入力する可能性があります).
したがって、簡単な解決策は、各値DECIMAL、D、M、Sの1つのセルを使用することです. 左から右への計算
A2:32.420278
B2:= int(a2)
C2:= int((A2-B2)* 60)
D2:=ラウンド((A2-B2-C2/60)* 3600,1)
E2:= B2&「°」&C2&「「」&"" "" "" "" "" "" 右から左への計算
A3:= B3 + C3/60 + D3/3600
B3:32
C3:25
D3:13
直接会話(セルへのセル)が必要な場合は、VBAを使用することをお勧めします.
アンドレアス.

応答3# ->にスキップ
2 #
JayKay1

こんにちはAndreasとThankyou Quick Reply.

理想的には、次の投稿からVBAコードを使用することをお勧めします.

MS Excell Macroを取得するには、正しいDMS値を負の小数値で出力しますか?

コードが信頼できない理由とコードのどのように堅牢なのかを理解することができると思えます.

度数、分、および秒の値を多数の値のために個々の列に分割しなければならない.

応答2# ->にスキップ
1 #
Andreas

面白い、私のコードがあなたのためにどのように機能するかは興味があります.
アンドレアス.

関数DecimalTodms(ByVal値、倍数、オプションのBYVALの場所)文字列として
'10進数をDMSに変換する:12.58225=>12°34' 56.1 "
薄暗く、sは整数です
薄暗い結果(0から2)文字列として
s= sgn(値)
value= abs(値)
i= int(値)
i<>0の場合、decimaltodms= i* s&"°"
値=(値-i)* 60
i= int(値)
i<>0の場合、decimaltodms= decimaltodms&i&""
値=(値-i)* 60
value= worksheetfunction.round(value、iif(ismissing(場所)、0、場所))
value<>0の場合、DecimalTodms= decimaltodms&valume&"" ""
DecimalTodms= ""の場合、decimaltodms= "0°"
エンド機能
dmstodecimal(stringとしてのByVal DMS)
'dmsとしてDMSとして変換する:12°34' 56.1 "=>12.58225
LONG iのように薄暗く、整数としてのj整数、値
DMS= REPLACE(DMS、 ""、 "")
左$(DMS、1)= "-"
S=-1
DMS= MID $(DMS、2)
そうしないと
S= 1
終わり
i= 1からLen(DMS)の場合
ケースミッド$(DMS、I、1)を選択
ケース「°」
値= CDBL(MID(DMS、J + 1、I-1))
dmstodecimal= dmstodecimal + value* s
j= i
ケース「」
値= CDBL(MID(DMS、J + 1、I-1))/60
dmstodecimal= dmstodecimal + value* s
j= i
ケース "" ""
値= CDBL(MID(DMS、J + 1、I-J-1))/3600
dmstodecimal= dmstodecimal + value* s
j= i
ケース "0"~ "9"、 "+"、application.international(XldCimalSeparator)
'はい
他のケース
DMSTODECIMAL= CVERR(XLERRNUM)
出口機能
エンドセレクト

エンド機能