【问题标题】:Excel formula to return a cell's custom formatExcel 公式返回单元格的自定义格式
【发布时间】:2019-07-25 21:26:10
【问题描述】:

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

[A1]  3 CASES
[A2]  33 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

【问题讨论】:

  • 接受失败并将使用用户定义的函数。将“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'

标签: excel excel-formula


【解决方案1】:

您可以使用自定义函数。

函数 get_format(r As Range) 作为字符串 get_format = r.NumberFormat 结束功能

然后使用

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

或者你可以检查一下单词CASE是否是数字格式

函数 check_case(r As Range) 作为布尔值 check_case = InStr(1, r.NumberFormat, "CASE") 结束功能

=if(check_case(A1),5,*A1,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

【讨论】:

  • 欣赏答案,但希望避免使用用户定义的函数。
  • 我认为如果没有用户定义的函数或创建一个手动输入单位的列,您将无法解决它。您从并非真正采用理想格式的数据开始。
【解决方案3】:

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

CTRL-F3 启动宏编辑器,创建新宏并为其命名,如 ExtractUnits

在引用框中,输入

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

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

=ExtractUnits

计算起来真的非常慢,但是我将数据作为文本输出。 我的长度都是一样的,所以我用 right 来提取单位,但你可以找到空间并解析。 如果您想要不同的单元格,请更改偏移参数。

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多