Подумайте о статически типизированном языке, вещи на prototype
статичны, а вещи на this
связаны с экземпляром.
Вы ищете наибольший общий делитель (GCD).
можно вычислить его рекурсивно в VBA, как это:
Function GCD(numerator As Integer, denominator As Integer)
If denominator = 0 Then
GCD = numerator
Else
GCD = GCD(denominator, numerator Mod denominator)
End If
End Function
И использование это в Вашем листе как это:
ColumnA ColumnB ColumnC
1 33 11 =A1/GCD(A1; B1) & ":" & B1/GCD(A1; B1)
2 25 5 =A2/GCD(A2; B2) & ":" & B2/GCD(A2; B2)
Это рекомендуемо, чтобы сохранить результат вызова функции в скрытом столбце и использовать этот результат, чтобы не вызывать функцию дважды на строку:
ColumnA ColumnB ColumnC ColumnD
1 33 11 =GCD(A1; B1) =A1/C1 & ":" & B1/C1
2 25 5 =GCD(A2; B2) =A2/C2 & ":" & B2/C2
Попробуйте эту формулу:
=SUBSTITUTE(TEXT(A1/B1,"?/?"),"/",":")
Результат:
A B C
33 11 3:1
25 5 5:1
6 4 3:2
Объяснение:
, Это не требует никаких специальных инструментариев или макросов. Единственный недостаток мог бы быть то, что результат считают текстом - не числом - таким образом, можно легко использовать его для дальнейших вычислений.
<час>Примечание: как @Robin предложенный День, увеличьте число вопросительных знаков (?), как желаемый уменьшить округление (благодарит Robin!).
Вторая формула на той странице использует функцию GCD Анализа ToolPak, можно добавить его от Инструментов> Дополнения.
=A1/GCD (A1, B1) &";: "& B1/GCD (A1, B1)
Это - больше математической формулы, а не текстовое управление на основе.
Спасибо. Я использовал это:
=CONCATENATE((number1/GCD(number1,number2)),":",((number2/GCD(number1,number2))))
Если у вас 2007, это отлично работает.
Ниже приведена формула, которую я использую. У меня возникла проблема с использованием GCD, потому что я использую довольно большие числа для вычисления отношений, и я обнаружил, что такие отношения, как «209: 1024», менее полезны, чем простое округление, поэтому отображается либо «1: », либо « : 1 ". Я также предпочитаю не использовать макросы, если это вообще возможно. Ниже результат.
=IF(A1>B1,((ROUND(A1/B1,0))&":"&(B1/B1)),((A1/A1)&":"&(ROUND(B1/A1,0))))
Часть формулы не нужна (например, «A1 / A1»), но я включил ее, чтобы показать логику, лежащую в основе. Кроме того, вы можете переключать степень округления, играя с настройкой каждой функции ROUND.