2013-12-03 3 views
2

Я пытаюсь нормализовать данные, читая пользовательский формат чисел. Фактические данные в следующие клетках имеют только значение 3 и 33Формула Excel для возврата пользовательского формата ячейки

[A1] 3 CASES 
[A2] 33 UNITS 

Термины «случаи» и «единицы» отображаются потому, что они являются частью пользовательского формата отчетливого в каждую ячейку. например A1 имеет код пользовательского номера: # «CASES», а A2 имеет код пользовательского номера: # «UNITS»

Я хотел бы нормализовать эти данные с помощью формулы excel в UNITS для целей отчетности. Я попытался использовать формулу

=CELL("format",A1) 

но возвращенное значение F0 вместо: # «СЛУЧАЕВ»

Если каждый случай имеет 5 единиц Я ожидаю, чтобы иметь дополнительный столбец, который вычисляет нормированные единицы с формула, которая читает что-то вроде:

=IF(CELL("format",A1)="CASES",5*A1,A1) 

Таким образом, приведенные единицы в столбце B будет

[B1] 15 
[B2] 33 
+0

Принятие поражения и использование функции, определенной пользователем. Перемещено сравнение «CASE» в уравнение excel, но для более легкой отладки/адаптации. Надеюсь, что это поможет следующему человеку ... [B1] = IF (IFERROR (FINS) (FINS), FALSE (FALSE), 5 * $ A1, $ A1) > Открытый номер функцииФормат (rgCell As Range) As String > numberFormat = rgCell.numberFormat > Конечная функция ' –

ответ

3

Вы можете использовать пользовательскую функцию.

 
Function get_format(r As Range) As String 

get_format = r.NumberFormat 

End Function 

Затем используйте

=if(get_format(a1)="# " & CHAR(34) & "CASE" & CHAR(34),5,*A1,1)

Или вы могли бы просто проверить, если слово СЛУЧАЙ в числовом формате

 
Function check_case(r As Range) As Boolean 

check_case = InStr(1, r.NumberFormat, "CASE") 

End Function 

=if(check_case(A1),5,*A1,1)

+1

ценит ответ, но надеялась избежать пользовательской функции. –

2

Построить USER- определенную функцию, скопировав прикрепленный код в свой модуль рабочей книги, вы можете использовать его на своем листе как =if(iscase(a1),5,1)*a1

Function IsCase(rgCell As Range) As Boolean 
If InStr(UCase(rgCell.NumberFormat), "CASE") > 0 Then 
    IsCase = True 
Else 
    IsCase = False 
End If 

End Function 
+0

оценил ответ, но надеялся избежать пользовательской функции. –

+1

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

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