我正在尝试通过读取自定义数字格式来规范化数据。以下单元格中的实际数据仅具有值3和33
[A1] 3 CASES
[A2] 33 UNITS
显示术语“CASES”和“UNITS”,因为它们是与每个单元格不同的自定义格式的一部分。例如 A1具有自定义数字格式代码:#“CASES”,A2具有自定义数字格式代码:#“UNITS”
我想通过excel公式将这些数据规范化为UNITS以用于报告目的。我试图使用公式
=CELL("format",A1)
但返回的值是F0而不是:#“CASES”
如果每个CASE有5个单位,我希望有一个额外的列,用一个公式来计算NORMALIZED UNITS:
=IF(CELL("format",A1)="CASES",5*A1,A1)
这样,B列中的NORMALIZED UNITS将是
[B1] 15
[B2] 33
答案 0 :(得分:5)
您可以使用自定义功能。
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)
或者您可以查看单词CASE是否采用数字格式
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)
通过复制工作簿模块中的附加代码来构建用户定义的函数,然后可以在工作表中将其用作=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
答案 2 :(得分:0)
我也一直试图解决这个问题。
使用旧的Excel 4宏功能可能的解决方案。
按 CTRL-F3 可以启动宏编辑器,创建新的宏,并为其命名,例如 ExtractUnits
在“引用”框中,输入
=GET.CELL(53,OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1))
在数据右侧的单元格中(在本例中为B列),输入
=ExtractUnits
计算起来确实非常慢,但是却把数据作为文本输出了。 我的长度都是一样的,所以我使用权来提取单位,但是您可以找到空间并进行解析。 如果要使用其他单元格,请更改偏移量参数。