返回单元格自定义格式的Excel公式

4

我正在尝试通过读取自定义数字格式来规范化数据。以下单元格中的实际数据仅具有值3和33。

[A1]  3 CASES
[A2]  33 UNITS

术语“CASES”和“UNITS”之所以显示,是因为它们是每个单元格特定的自定义格式的一部分。例如,A1具有自定义数字格式代码:“# CASES”,而A2具有自定义数字格式代码:“# UNITS”。

我想通过Excel公式将此数据规范化为单位,以便进行报告。我尝试使用以下公式:

=CELL("format",A1)

但是返回的值是F0,而不是“CASES”所期望的#号。
如果每个CASE有5个单位,我希望有一个额外的列来计算标准化单位,公式类似于:
=IF(CELL("format",A1)="CASES",5*A1,A1)

这样,B列中的标准化单位将是:
[B1]  15
[B2]  33

接受失败并将利用用户定义函数。 为了更容易调试/适应性,将“CASE”比较移入Excel公式中。希望这能帮助下一个人...[B1] =IF(IFERROR(FIND(" CASES",numberformat($A1)),FALSE),5*$A1,$A1)
Public Function numberFormat(rgCell As Range) As String numberFormat = rgCell.numberFormat End Function'
- Chuck The Nerd
3个回答

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
感谢您的回答,但我希望避免使用用户定义函数。 - Chuck The Nerd

2

通过复制附加的代码到您的工作簿模块中,构建一个用户定义函数,然后您可以在工作表中使用它,如下所示:=if(iscase(a1),5,1)*a1

注:请保留 HTML 标签。
Function IsCase(rgCell As Range) As Boolean
If InStr(UCase(rgCell.NumberFormat), "CASE") > 0 Then
    IsCase = True
Else
    IsCase = False
End If

End Function

感谢您的回答,但我希望避免使用用户定义函数。 - Chuck The Nerd
1
我认为你没有办法在不使用自定义函数或创建一个手动输入单位的列的情况下解决它。你正在处理的数据并不是一个理想的格式。 - nutsch

1
我会尽力帮助您翻译中文内容,本次需要翻译的内容为:

我一直在试图解决这个问题。
使用旧的Excel 4宏函数可能有解决方案。

按下CTRL-F3打开宏编辑器,创建一个新的宏并给它一个名称,比如ExtractUnits

在"引用"框中输入

=GET.CELL(53,OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1))

在数据右侧的单元格中(在本例中为列B),输入。
=ExtractUnits

计算速度非常慢,但可以将数据以文本形式输出。我的数据都是相同长度的,因此我使用 right 函数提取单位,但你也可以找到空格并解析。如果你想要不同的单元格,只需更改偏移参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接