Формула заявления переключателя Excel для преобразования "M" или "K" в 1000000000 или 1000000 - PullRequest
0 голосов
/ 29 января 2019

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

85.5M
30.3K
20M

Я хочу создать инструкцию switch, которая автоматически прошла бы через данные, чтобы соответствующим образом преобразовать M и K, пример:

85,500,000,000
30,300,000
20,000,000,000

Проблема, похоже, связана с (LEFT(H3, -3), частью формулы, потому что именно там я получаю красные скобки.Я пытался переключить LEFT на RIGHT, но, похоже, это не имеет значения.

=SWITCH(LEFT(H3, -3), "M", 1000000000, "K", 1000000)

Результаты выглядят как #VALUE, которые я изучил и пришел к выводусинтаксическая ошибка ...

enter image description here

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Возможно, это то, что вы хотите:

 =IFERROR(LEFT(A1,LEN(A1)-1)*SWITCH(RIGHT(A1,1),"M",10^6,"K",10^3),A1)
0 голосов
/ 29 января 2019

Самый простой способ - использовать right ().Right возвращает последний символ (или символы) или строку.Используя его, есть несколько решений.

Вы можете сделать

Iferror(Value(A1),Value(Left(A1,Len(A1)-1))*If(right(A1)="M",10^6,10^3))

То, что мы делаем, это сначала сказать, если значение A1 является ошибкой, протестируйте функцию.Это связано с тем, что если значение A1 является просто числом, оно будет игнорировать всю строковую ерунду, которую мы планируем сделать с ним.

Предполагая, что это не число, в конце должны быть K или M.Мы хотим удалить это, чтобы получить номер.Поэтому мы берем самые левые символы до K или M и смотрим только на них.Мы делаем это, спрашивая, какова длина А1, и вытягивая на 1 символ меньше слева.Это всегда будет пропускать последний символ, который в нашем случае всегда будет K или M. Важно, чтобы мы отфильтровали числа перед тем, как сделать это, иначе это удалит окончательное число, и наш результат будет отключен с коэффициентом 10.

Теперь мы оцениваем эту строку, чтобы получить число.Теперь нам нужно умножить его на K или M, которые мы вытащили.К счастью, это так же просто, как поставить оператор * и оператор if, поскольку у нас есть только 2 варианта.Либо это M, и мы умножаем на 10 ^ 6, либо это ak, и мы умножаем на 10 ^ 3.

Но поскольку это превосходно, вы также можете извлечь много чушь:

Iferror(Value(A1),(Left(A1,Len(A1)-1)+0)*If(right(A1)="M",10^6,10^3))

технически короче и все равно будет работать, несмотря на меньший смысл.

0 голосов
/ 29 января 2019

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

enter image description here


Если выоткрыть для вспомогательного столбца ....

=IF(RIGHT(A2,1)="M",SUBSTITUTE(A2,"M","")*10^6,SUBSTITUTE(A2,"K","")*10^3)

Если вы открыты для Macro ....

Option Explicit

Sub Convert()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- UPDATE

Dim LR As Long, Val As Range
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

'Change .Offset(, 4) to .Offset(,) to replace the existing value
For Each Val In Range("A2:A" & LR)
    Select Case Right(Val, 1)
        Case "M"
            Val.Offset(, 4) = Left(Val, Len(Val) - 1) * (10 ^ 6)
        Case "K"
            Val.Offset(, 4) = Left(Val, Len(Val) - 1) * (10 ^ 3)
    End Select
Next Val

End Sub

Если вы открыты для UDF....

Function CSTConvert(Val As Range) As Long

Select Case Right(Val, 1)
    Case "M"
        CSTConvert = Left(Val, Len(Val) - 1) * (10 ^ 6)
    Case "K"
        CSTConvert = Left(Val, Len(Val) - 1) * (10 ^ 3)
End Select

End Function
...