Excel、libreoffice / openoffice、またはその他の無料スプレッドシートでの度、分、秒単位の計算


5

お父さんは占星術を学んでいるので、彼はそれを計算する必要があります-そして、ほとんどの本はDegrees Minutes Secondsの非命名法を使用しています-DMSの観点から計算を処理するためにExcelを設定する方法はありますか?

編集:現在、Excel 2007を使用しています

Edit2:オープンオフィス/リブレオフィスをインストールするオプションがあり、MS Excelでそれを行う方法がないかもしれないと思うので、質問を広げて、Office 2007が好ましいですが、ほとんどすべての一般的なWindowsスプレッドシートが行います

編集3:どうやら時間を回避策として使用して乗算を許可しない-この場合に必要です


バージョンを追加するために編集
ジャーニーマンオタク

これは希望に満ちた、見えないsocial.technet.microsoft.com/Forums/en-US/excel/thread/...
TOG

OOoまたはlibre officeをオプションとして追加し、問題の値を乗算できるようにする必要があることを編集しました
Journeyman Geek

回答:


2

すぐに使用できるExcelは、ユーザーの要求をサポートしていません。これを支援するプラグインがあるかもしれませんが、代わりに少しの回避策を提供したいと思います:

Excel(およびおそらくOOoとLibreOffice)に正しい区分、基数などを使用して必要に応じて値を表示および計算させる時間として、数値をフォーマットできます。

次のカスタム形式(Excel、OOo、LibreOfficeは同等ですが、テスト用のコピーはありません)を使用すると、それらも正しいシンボルでレンダリングされます。これ[h]により、24時間に達すると時間をゼロにリセットできなくなり、任意の大きな角度が許可されます。先行ゼロが必要な場合は、各文字を2倍にします。

[h]º m' s\"

これらは必要に応じて一緒に追加することができます(結局、それらは単に下の数字です)。ただし、これは最終結果が肯定的な場合にのみ機能します。Excel は負の時間をレンダリングしません

この値を10進度の値に変換する必要がある場合は、Excelの時刻形式の「日」の値が1であるため、24を掛けるだけで済みます(1時間は1/24など)。

この数式が入るセルに、時間ではなく通常の書式が設定されていることを確認してください。

=A1*24

または、次を使用して時間値から特定のコンポーネントを抽出することもできます。

=INT(A1*24)    returns degrees
=MINUTE(A1)    returns minutes
=SECOND(A1)    returns seconds

どうやら彼らも乗算する必要があります。
ジャーニーマンオタク

ああ、それは、各値が実際にはそれ自体ではなく、それ自体の1/24なので、Excelによって12º 0' 0"実際に考慮さ0.5れているからです。(2度の値の)乗算の最終結果に乗算し24て、これを修正してください。スケーラーでこの乗算を行う必要はありません。
DMA57361

1

ここに私の天文学スプレッドシートの仕事をする2つのマクロがあります。方向の値(deg、min、sec)はテキストとしてフォーマットされます。セルA1にが含まれている場合、セルA2に-77° 26' 09.5"入力=DMS2Real(A1)すると、が表示されます -77.4359722222=Real2DMS(A2)A3では変換が逆になります。

[ツール]> [マクロ]> [マクロの整理]> [LibreOffice Basic]> [標準](または保存する場所)からマクロ関数を入力します。

10進度は、トリガー関数で必要なラジアン値ではないことに注意してください。

' Convert degrees, minutes, seconds to a single real number and back. 

' Tested in LibreOffice Calc 5.1.6.2
' Based on  https://support.microsoft.com/en-gb/help/213449/how-to-convert-degrees-minutes-seconds-angles-to-or-from-decimal-angle


Function DMS2Real(Degree_DMS As String) As Double  ' -77° 26' 09.5" -> -77.4359722222
    ' use double precision floating-point.
    Dim degrees As Double
    Dim minutes As Double
    Dim seconds As Double
    Dim sign As Integer

    ' Set degree to value appearing before "°" in argument string.
    degrees = Val(Left(Degree_DMS, InStr(1, Degree_DMS, "°") - 1))

    ' Only positive value is computed. Sign of result is changed in final statement
    '  i.e. -7° 8' 9"  means (-7 - 8/60 - 9/3600)
    If degrees < 0 Then
        degrees = degrees * -1
        sign = -1
    Else 
        sign = 1
    End If

    ' Set minutes to the value between the "°" and the "'"
    '  of the text string for the variable Degree_Deg divided by 60.
    ' The Val function converts the text string to a number.
    minutes = Val(Mid(Degree_DMS, InStr(1, Degree_DMS, "°") + 2, InStr(1, Degree_DMS, "'") - InStr(1, Degree_DMS, "°") - 2)) / 60
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
    seconds = Val(Mid(Degree_DMS, InStr(1, Degree_DMS, "'") + 2, Len(Degree_DMS) - InStr(1, Degree_DMS, "'") - 2)) / 3600
    DMS2Real =  sign * (degrees + minutes + seconds)
End Function


Function  Real2DMS(dms)    ' -77.4359722222 -> -77° 26' 9.5"
    DIM sign As String
    ' allow for negative values
    If dms < 0 Then
        dms = dms * -1
        sign = "-"
    Else 
        sign = " "
    End If

    'Set degree to Integer of Argument Passed
    Degrees = Int(dms)
    'Set minutes to 60 times the number to the right
    'of the decimal for the variable Decimal_Deg
    Minutes = (dms - Degrees) * 60
    'Set seconds to 60 times the number to the right of the
    'decimal for the variable Minute
    Seconds = Format(((Minutes - Int(Minutes)) * 60), "0.0")
    'Returns the Result of degree conversion
    '(for example, 10.46 = 10~ 27  ' 36")
    Real2DMS = sign & Degrees & "° " & Int(Minutes) & "' " & Seconds + Chr(34)
End Function

Sub Main
End Sub

1

たとえば

=SIN(DEGREES)

したがって、各式で明示的な変換を行う必要があります。たとえば

=SIN(RADIANS(DEGREES + MINUTES/60 + SECONDS/3600))

または、VBAでカスタム式を作成できます

Function SinDMS(Deg As Double, Min As Double, Sec As Double) As Double

    SinDMS = Sin((3.1415 * 2 * (Deg + Min / 60 + Sec / 3600)) / 360)

End Function

(ただし、計算が多い場合は非常に遅くなります)


3.1415は、3.1416よりはるかに精度が低くなります。とにかくそれは使用することをお勧めしますWorksheetFunction.Pi
phuclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.