【问题标题】:Check Cell Formatting in Excel在 Excel 中检查单元格格式
【发布时间】:2016-05-04 18:13:15
【问题描述】:

我正在尝试制作一个简单的 Excel 评估,但遇到了一个绊脚石。

“候选人”需要将单元格正确格式化为“货币”,以便在单元格中显示 £ 符号。

是否有一个函数可以在单元格格式化后检查'£'是否存在

功能栏仅将值显示为不带 £ 符号的数字

在我的评分表上,我将“1”表示正确答案,“0”表示不正确。

因此,我真的可以使用一些建议来帮助我确定“候选人”是否正确格式化了单元格

非常感谢

保罗

【问题讨论】:

    标签: excel conditional-formatting vba


    【解决方案1】:

    进入 VBE 并添加一个空模块。将以下代码复制到该模块中:

    Option Explicit
    
    Public Function IsFormatted(FormattedCell As Range) As Byte
    
    IsFormatted = 0
    If InStr(1, FormattedCell.Cells(1, 1).NumberFormat, "$", vbTextCompare) >= 1 Then IsFormatted = 1
    
    End Function
    

    那么你就有了可以像这样使用的函数:=IsFormatted(D2)

    注意:货币的通用数字格式由 $ 符号而非 £ 组成。这会根据您的 Windows 设置自动转换为英国货币。如果您想确保人们已将单元格的格式设置为 UK £,那么您需要更改上述代码中的以下行:

    If InStr(1, FormattedCell.Cells(1, 1).NumberFormat, "[$£-809]", vbTextCompare) >= 1 Then IsFormatted = 1
    

    请记住,上面的函数不是volatile。这意味着如果引用的单元格发生更改,函数的值将不会更改。换句话说:如果您检查像=IsFormatted(D2) 这样的单元格,并且我们假设这个公式在单元格 F2 中,那么当 D2 格式不正确时,F2 将为 0。现在,如果您正确格式化 D2,那么 F2 仍将显示 0。因此,您必须使用 F9 的函数强制更新工作表,或者将 Application.Volatile 添加到上述函数中。然而,这可能会显着降低您的 Excel 速度。更多详情请看以下文章:http://www.excel-easy.com/vba/examples/volatile-functions.html

    【讨论】:

    • 嗨,拉尔夫,测试表称为“评估”,是否需要在 VBE 代码中的任何地方指定
    • 不,只是使用公式。示例:=IsFormatted(Assesment!B1).
    【解决方案2】:

    您可以使用 a = Right(Left(range("D3").numberformat, 3), 1) 查看它的格式。根据它提取的字符串,您将能够找到货币单元格中显示的符号。

    您还可以将范围更改为动态变量以检查您想要的任何单元格。

    【讨论】:

      【解决方案3】:

      您可以在没有 VBA 的情况下仅使用 Excel 公式来执行此操作,但是,有一个警告可能对您很重要,也可能不重要。

      在你的评分表中输入这个公式。

      =IF(LEFT(CELL("format",testSheet!D2),1)=",",1,0)
      
      1. testSheet 是候选表
      2. CELL("format", 参数为货币格式的单元格返回 ,[decimal places]
      3. LEFT(...,1) 返回数字 2 的字符串中的第一个字母
      4. IF 包装器表示如果格式的第一个字符是 ,,则为 1,否则为 0。
      5. 这里是警告,格式可以是£$ 或任何其他符号,所以我不知道是否有必要进行测试。李>

      最后,您可以修改此公式以测试 2 位小数,像这样

      =IF(LEFT(CELL("format",testSheet!D2),2)=",2",1,0)
      

      【讨论】:

      • 您的解决方案似乎不适用于我的计算机。我得到=CELL("format", SomeCell) 的返回值C2-。会不会是您的解决方案需要特定的语言代码?
      • @Ralph C2- 是会计格式。您是否正在测试“候选人”是否单击了会计格式图标?如果是这样,只需更改If 语句中的格式返回类型。有关该功能的更多信息,请参阅CELL
      • 奇怪,我选择了 currency 而不是 accounting。他们都一样吗?此外,引用的单元格格式正确,显示£,但您的解决方案返回0。也许我应该注意,英国不是我的母语,因此我必须在数字格式下拉菜单中明确选择 £ 符号(在货币范围内)。
      • @Ralph 我刚刚做了一个测试。当我格式化为$(母语英语)时,它显示C2,但当我选择任何非本地货币时显示,2。也许这可以帮助您对其进行一些修改以使其适合您?另请注意,使用CELL,您需要每次重新计算以使其在发生更改时显示新格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      相关资源
      最近更新 更多