2015-05-30 1 views
2

Возможно ли работать в Excel с некоторой метрикой суффикса: Если я пишу 1000, ячейка показывает 1k. если я напишу 1000000, ячейка показывает 1M.Можно ли использовать метрические обозначения «k» в excel?

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

Function lecI(cadena) As Double 
    u = Right(cadena, 1) 
    If u = "k" Then 
     mult = 1000 
    ElseIf u = "M" Then 
     mult = 1000000 
    ElseIf u = "m" Then 
     mult = 0.001 
    End If 
    lecI = Val(Left(cadena, Len(cadena) - 1)) * mult 
End Function 

Function wriI(num) As String 
    If num > 1000000 Then 'M 
     wriI = Str(Round(num/1000000, 2)) & "M" 
    ElseIf num > 1000 Then 'k 
     wriI = Str(Round(num/1000, 1)) & "k" 
    ElseIf num < 0.01 Then 'm 
     wriI = Str(Round(num * 1000, 1)) & "m" 
    Else: wriI = Str(num) 
    End If 
+5

см. Это http://www.excel-easy.com/examples/custom-number-format.html – Vasily

+1

У вас есть что-то, что работает, но вы хотите * более подходящее решение * - кажется мне чистое мнение. К Q: «Можно ли использовать метрические обозначения« k »в excel?» кажется, что вы уже удовлетворены собой, это A ** YES **. – pnuts

+0

Как только OP создает строки из совершенно точных чисел, он мог бы по крайней мере отформатировать их для создания функциональных строк ... 'Format (num," #, ## 0 ")'.Или он может использовать метод «Range.NumberFormat» после того, как по крайней мере иметь функциональные числа. OFF/Rant: «Это называется * mosqear *, это не совсем комар или медведь»./Венгерская пословица/ – user3819867

ответ

2

Основываясь на link by @Vasily, вы можете получить желаемый результат, используя только условное форматирование. Это хорошо, потому что это означает, что все ваши значения хранятся как Числа, а не текст, а математика работает, как обычно,.

Общие шаги:

  • Создание нового условного форматирования для каждого блока 1000, который применяется формат чисел для этого блока
  • Добавить наибольшее состояние в верхней части, так что форматирует первый
  • полощите и повторяю, чтобы получить все те, которые вы хотите

Условное форматирование используется для столбца типа C, который представляет собой просто случайные данные с разной степенью десяти. Это тот же номер, что и столбец D, иначе стиль отличается.

conditional setup

Количество форматов, довольно легко, так как они являются такими же, как that link, see Large Numbers section.

  • те = 0 " "
  • тысяч = 0, " k"
  • миллионы = 0,, " M"
  • и так далее для однако много вы хотите

Автоматизация, если вы не хотите щелкать и введите весь день, вот несколько VBA, которые создадут для вас все условное форматирование (для текущего Selection). Этот пример выходит на миллиарды. Продолжайте добавлять полномочия 3, расширив Array с большим количеством записей.

Sub CreateConditionalsForFormatting() 

    'add these in as powers of 3, starting at 1 = 10^0 
    Dim arr_markers As Variant 
    arr_markers = Array("", "k", "M", "B") 

    For i = UBound(arr_markers) To 0 Step -1 

     With Selection.FormatConditions.Add(xlCellValue, xlGreaterEqual, 10^(3 * i)) 
      .NumberFormat = "0" & Application.WorksheetFunction.Rept(",", i) & " "" " & arr_markers(i) & """" 
      .StopIfTrue = False 
     End With 

    Next 

End Sub 

изменить значение StopIfTrue так, что это не нарушает другие условное форматирование, которое могло бы существовать. Если наибольшее условие находится сверху (добавлено первым), то NumberFormat от этого удерживается. По умолчанию они создаются с помощью StopIfTrue = True. Это спорный вопрос, если у вас нет другого условного форматирования в этих ячейках.

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