Расчеты в градусах, минутах, секундах в Excel, libreoffice / openoffice или любой другой бесплатной электронной таблице

14538
Journeyman Geek

Мой папа увлекся астрологией, поэтому ему нужно сделать для нее расчеты - и в большинстве книг используется неменклатура Degrees Minutes Seconds - есть ли способ установить Excel или Open Office Calc для обработки вычислений в терминах DMS?

Изменить: в настоящее время мы используем Excel 2007

Edit2: я подозреваю, что установка open office / libre office будет вариантом, и, возможно, не будет никакого способа сделать это в MS Excel - поэтому, расширяя вопрос, Office 2007 предпочтительнее, но в значительной степени подойдет любая обычная электронная таблица Windows.

Редактировать 3: очевидно, использование времени в качестве обходного пути не позволяет умножение - что необходимо в этом случае

5
отредактировано, чтобы добавить версию Journeyman Geek 12 лет назад 0
Это не выглядит обнадеживающе, http://social.technet.microsoft.com/Forums/en-US/excel/thread/a4388c40-5ea8-4944-9626-708c28389e7d/ Tog 12 лет назад 0
отредактировано, чтобы добавить OOo или libre office в качестве параметров, и что мы должны иметь возможность умножить значения, о которых идет речь Journeyman Geek 12 лет назад 0

3 ответа на вопрос

2
DMA57361

Из коробки Excel не поддерживает то, что вы просите. Могут быть плагины, которые помогут с этим, но вместо этого я хотел бы предложить немного обойти:

Вы можете отформатировать числа как время, чтобы Excel (и, возможно, OOo и LibreOffice) отображал и вычислял значения, которые вам нужны, с правильными делениями, основами и т. Д.

Использование следующего пользовательского формата (Excel, OOo и LibreOffice будут иметь эквиваленты, но у меня нет копии для проверки) также отобразит их с правильными символами. В [h]предотвращает час обнуления, как он достигает 24 позволяет сколь угодно большие углы. Если вы хотите, чтобы начальные нули, то просто удвойте каждую букву.

[h]º m' s\" 

Они могут быть добавлены вместе, и т. Д., По мере необходимости (в конце концов, это просто цифры внизу). Однако это будет работать только в том случае, если конечный результат будет положительным; Excel не будет отображать отрицательные времена .

Если вам нужно преобразовать это значение в значение в десятичных градусах, вам просто нужно умножить на 24, потому что «день» в формате времени Excel имеет значение 1 (то есть час равен 1/24 и т. Д.).

Просто убедитесь, что ячейка, в которую входит эта формула, имеет нормальное форматирование, а не время:

=A1*24 

Кроме того, вы также можете извлечь определенные компоненты из значения времени, используя следующее:

=INT(A1*24) returns degrees =MINUTE(A1) returns minutes =SECOND(A1) returns seconds 
по-видимому, мне нужно, чтобы они тоже умножались. Journeyman Geek 12 лет назад 0
ах, это потому, что каждое значение на самом деле не само по себе, а 1/24 от самого себя, так что `12º 0 '0" `действительно рассматривается как` 0.5` в Excel. Попробуйте умножить конечный результат умножения (на два градуса значения) на `24`, чтобы исправить это. Вам не нужно делать это умножением на шкалу. DMA57361 12 лет назад 0
1
grojo

Нет никакого способа сказать Excel переключаться между радианами и градусами при использовании функций, таких как, например,

=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`] (https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheetfunction-pi-method-excel) phuclv 6 лет назад 0
1
Bruce Mayo

Вот два макроса, которые делают работу для моей астрономической таблицы. Значения направления (град, мин, сек) форматируются как текст. Если ячейка A1 содержит -77° 26' 09.5", я могу войти =DMS2Real(A1)в ячейку A2, которая затем будет отображаться -77.4359722222. =Real2DMS(A2)в A3 обратное преобразование.

Введите функции макросов через Инструменты> Макросы> Упорядочить макросы> LibreOffice Basic> Стандарт (или там, где вы хотите их хранить).

Обратите внимание, что десятичные градусы не являются значениями радиана, требуемыми функциями триггера.

' 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 

Похожие вопросы