2013-12-17 1 views
6

Я использую excel, и я хочу отобразить значение для определенного количества значимых цифр.Как получить excel для отображения определенного количества значимых цифр?

Я попытался с помощью следующего уравнения

=ROUND(value,sigfigs-1-INT(LOG10(ABS(value)))) 

со значением заменяется номером я использую и sigfigs заменяется числом значащих цифр, которые я хочу.

Эта формула работает иногда, но в других случаях это не так.

Например, значение 18.036 изменится на 18, что имеет 2 значащих цифры. Для этого нужно изменить форматирование источника, чтобы сохранить 1 десятичное место. Но это может ввести дополнительную значительную цифру. Например, если результат был равен 182, а затем десятичное место изменило значение на 182,0, теперь у меня было бы 4 сиг-фига вместо 3.

Как получить excel для установки числа сиг-инжира для меня, так что я не нужно ли это выяснять вручную?

+0

Так что вы хотите, чтобы: 18.036-> 18,0, 18.16-> 18,2 185.212-> 185, 1856705.5223-> 1860000? –

+0

@ bto.rdz Правильно – Veridian

+0

Единственный способ, которым я знаю, это преобразовать ваш номер в строку, затем выполнить некоторую операцию в зависимости от того, где находится десятичная точка, плохо выставить пример –

ответ

3

Формула (А2 содержит значение и B2) sigfigs

=ROUND(A2/10^(INT(LOG10(A2))+1),B2)*10^(INT(LOG10(A2))+1) 

может дать вам номер, который вы хотите, скажем, в С2. Но если последняя цифра равна нулю, то она не будет отображаться в формате General. Затем вы должны применить формат номера, определенный для этой комбинации (значение, sigfigs), и это через VBA. Следующее должно работать. Вы должны передать три параметра: (val,sigd,trg), trg - это целевая ячейка для форматирования, где у вас уже есть номер, который вы хотите.

Sub fmt(val As Range, sigd As Range, trg As Range) 
    Dim fmtstr As String, fmtstrfrac As String 
    Dim nint As Integer, nfrac As Integer 
    nint = Int(Log(val)/Log(10)) + 1 
    nfrac = sigd - nint 
    If (sigd - nint) > 0 Then 
     'fmtstrfrac = "." & WorksheetFunction.Rept("0", nfrac) 
     fmtstrfrac = "." & String(nfrac, "0") 
    Else 
     fmtstrfrac = "" 
    End If 
    'fmtstr = WorksheetFunction.Rept("0", nint) & fmtstrfrac 
    fmtstr = String(nint, "0") & fmtstrfrac 
    trg.NumberFormat = fmtstr 
End Sub 

Если вы не против того, строку вместо числа, то вы можете получить строку формата (скажем, D2), как

=REPT("0",INT(LOG10(A2))+1)&IF(B2-(INT(LOG10(A2))+1)>0,"."&REPT("0",B2-(INT(LOG10(A2))+1)),"") 

(это дублирует код VBA) и затем использовать (в, скажем, E2)

=TEXT(C2,D2). 

, где ячейка C2 по-прежнему имеет формулу выше. Вы можете использовать ячейку E2 для целей визуализации, а число, полученное в C2 для другой математики, при необходимости.

+0

Я никогда не использовал VBA раньше, можете ли вы дать мне быстрый курс крушения? У меня есть опыт программирования, поэтому я должен быть в состоянии заполнить некоторые пробелы. Где это, где я вставляю код, как его использовать? – Veridian

+0

@starbox - Извиняюсь, но здесь невозможно провести крутой курс на VBA (вне зависимости от того, что это вне темы). Я * попробую * найти подходящую ссылку и иметь в виду, что вам придется инвестировать, вероятно, больше часа, чтобы вы с этим справились. Вы можете попробовать другой вариант в то же время и посмотреть, дает ли он ожидаемые результаты. –

+0

Использует VBA только для того, чтобы настроить MACRO? – Veridian

0

Вместо этого вы можете попробовать собственное форматирование.

Пробег: https://support.office.com/en-nz/article/Create-a-custom-number-format-78f2a361-936b-4c03-8772-09fab54be7f4?ui=en-US&rs=en-NZ&ad=NZ.

В течение трех значащих цифр, я ввожу в поле для пользовательского типа: [> 100] ## 0 [< = 100] #, ## 0

+0

Я не уверен в этом, или я не понимаю его. Формат '##. 0' вызывает' 4141' для отображения как '4141.0'. Я не могу придумать способ получить «4140». –

+0

Для форматирования текста без десятичной точки или десятичных знаков используйте ТЕКСТ ([значение], «0»). Например, TEXT (-0,6, «0») равно -1, TEXT (-0,5, «0») равно 0, TEXT (0,4, «0») равно 0, TEXT (0,5, «0») равно 1, и т. д. Это также может привести к началу нулей. ТЕКСТ (15, «000») - 015. – Steve

3

Использование научной нотации, скажем, если у вас есть. 180000 и вам нужно 4 sigfigs, единственный способ - напечатать как 1.800x10^5

+1

Пришел сюда, чтобы предложить научную нотацию. Вот как я это делал, поэтому он должен быть лучшим! –

1

Это старый вопрос, но я изменил код VBA sancho.s, так что это функция, которая принимает два аргумента: 1) номер, который вы хотите отобразить с помощью соответствующих сиг-фигов (val), и 2) количество сиг-фигов (sigd). Вы можете сохранить это в качестве дополнения в функции в Excel для использования в качестве нормальной функции:

Public Function sigFig(val As Range, sigd As Range) 
    Dim nint As Integer 
    Dim nfrac As Integer 
    Dim raisedPower As Double 
    Dim roundVal As Double 
    Dim fmtstr As String 
    Dim fmtstrfrac As String 

    nint = Int(Log(val)/Log(10)) + 1 
    nfrac = sigd - nint 

    raisedPower = 10^(nint) 
    roundVal = Round(val/raisedPower, sigd) * raisedPower 

    If (sigd - nint) > 0 Then 
     fmtstrfrac = "." & String(nfrac, "0") 
    Else 
     fmtstrfrac = "" 
    End If 

    If nint <= 0 Then 
     fmtstr = String(1, "0") & fmtstrfrac 
    Else 
     fmtstr = String(nint, "0") & fmtstrfrac 
    End If 

    sigFig = Format(roundVal, fmtstr) 
End Function 

Это, кажется, работает во всех случаях использования я пытался до сих пор.

2

ВНИМАНИЕ: с ума длиной первенствует формула впереди

Я также смотрел на работу со значительными фигурами, и я не смог использовать VBA как электронные таблицы не может поддерживать их. Я пошел на этот вопрос/ответ и на многие другие сайты, но все ответы все время не имеют отношения ко всем номерам. Меня заинтересовал принятый ответ, и он приблизился, но как только мои номера были < 0.1 У меня получилось #value! ошибка. Я уверен, что я мог бы это исправить, но я уже пошел по тропинке и просто нажал.

Проблема:

мне нужно сообщить переменное число значащих цифр в положительном и отрицательном режиме с номерами от 10^-5 до 10^5. Кроме того, согласно клиенту (и до purple math), если было поставлено значение , оно было точным до +/- 1, и мы хотим представить 3-сиговый фиг, ответ должен быть «100». поэтому я включил это также.

Решение:

Мое решение для формулы первенствовать, которая возвращает текстовое значение с требуемыми значащими цифрами для положительных и отрицательных чисел.

Это long, но, как представляется, генерирует правильные результаты в соответствии с моими испытаниями (описанными ниже) независимо от количества и значимых цифр. Я уверен, что это можно упростить, но в настоящее время это не так. Если кто-то хочет предложить упрощение, пожалуйста, оставьте мне комментарий!

=TEXT(IF(A1<0,"-","")&LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),(""&(IF(OR(AND(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)+1=sigfigs,RIGHT(LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),1)="0"),LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"))<=sigfigs-1),"0.","#")&REPT("0",IF(sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1))>0,sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)),0))))) 

Примечание: Я именованный диапазон называется "sigfigs" и мои номера начинаются в ячейке A1

Результаты тестов:

Я тестировал против wikipedia list of examples и мои собственные примеры пока положительные и отрицательные. Я также тестировал несколько значений, которые давали мне проблемы на ранней стадии, и все, кажется, дают правильные результаты.

Results from Wikipedia examples

Я также протестировал с несколькими значениями, которые дали мне вопросы на ранней стадии и все, кажется, производит правильные результаты в настоящее время.

3 Инжир Тестовых

99.99 -> 100. 
99.9 -> 99.9 
100 -> 100. 
101 -> 101 

Примечание:

Лечения отрицательного чисел

Для Лечить отрицательные числа, я включил конкатенацию с отрицательным знаком, если меньше чем 0, и использовать абсолютное значение для всей другой работы.

Способ строительства: Первоначально она была разделена на около 6 столбцов в Excel, которые выполняются различные шаги, и в конце я слившихся все шаги в одну формулу выше.

0

Вы можете попробовать

=ROUND(value,sigfigs-(1+INT(LOG10(ABS(value))))) 

значение :: Номер, который вы хотите округлить.

sigfigs :: Число значимых цифр, которые вы хотите округлить до.

0

Округление до значащих цифр - это одно ... адресованное выше. Форматирование на определенное количество цифр - это другое ... и я отправлю его здесь тем, кто пытается сделать то, что я был, и оказался здесь (как я, скорее всего, буду делать в будущем) ...

Пример отображения четырех цифр:

.

Использование Главная> Стили> Условное форматирование

Новое правило> Формат только клетки, содержащие

Cell Value> между> -10> 10> Числовой формат 3 знака после запятой

Новое правило> Формат только клетки, содержащие

Cell Value> между> -100> 100> Числовой формат 2 знака после запятой

Новое правило > Формат только клетка, содержащая

Cell Value> между> -1000> 1000> Форматом Number 1 десятичного

Нового правило> Формат только клетка, содержащей

Cell Value> не между> -1000> 1000> Формат Число 0 знаков после запятой

.

Убедитесь, что они находятся в этом порядке и отметьте все флажки «Стоп, если правда».

0

Формула ниже работает нормально. Число значимых цифр указано в первой текстовой формуле. 0,00 и 4 для 3sf, 0,0 и 3 для 2SF, 0.0000 и 6 для 5sf и т.д.

=(LEFT((TEXT(A1,"0.00E+000")),4))*POWER(10, 
(RIGHT((TEXT(A1,"0.00E+000")),4))) 

формула справедлива для Е +/- 999, если есть несколько дальше этого увеличить число последнего три нуля и изменить второй 4 на число нулей +1.

Обратите внимание, что отображаемые значения округлены до значительных цифр и должны использоваться только для отображения/вывода. Если вы делаете дальнейшие вычисления, используйте исходное значение в A1, чтобы избежать распространения незначительных ошибок.

1

Я добавил к вашей формуле, так что также автоматически отображает правильное количество знаков после запятой.В приведенной ниже формуле замените цифру «2» на количество десятичных знаков, которое вы хотите, что означает, что вам нужно будет сделать четыре замены. Вот обновленная формула:

=TEXT(ROUND(A1,2-1-INT(LOG10(ABS(A1)))),"0"&IF(INT(LOG10(ABS(ROUND(A1,2-1-INT(LOG10(ABS(A1)))))))<1,"."&REPT("0",2-1-INT(LOG10(ABS(ROUND(A1,2-1-INT(LOG10(ABS(A1)))))))),"")) 

Например, если ячейка A1 имела значение = 1/3000, который является 0,000333333 .., приведенная выше формула, как написанные выходы 0.00033.

0

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

I.e. # ###. будет показывать цифры в тысячах. #, ### .. показывает числа в миллионах.

Надеется, что это помогает

Смежные вопросы