在Excel中检查单元格格式

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

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

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

function栏只显示数字作为没有英镑符号的数字

功能栏值

在我的评分表上,我给出正确答案的值为1,错误的值为0。

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

在这里输入图像说明

非常感谢

保罗

进入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 

那么你有这样的function: =IsFormatted(D2)

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

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

请记住,上述function是volatile 。 这意味着如果引用的单元格被更改,函数的值将不会改变。 换句话说:如果你检查一个像这样的单元格=IsFormatted(D2)并且我们假设这个公式是在单元格F2中,那么当D2格式不正确时,F2将是0。 现在,如果你正确格式化了D2,那么F2仍然会显示0.所以,你必须用F9强制更新工作表,或者将Application.Volatile添加到上面的函数中。 但是,这可能会显着减慢您的Excel。 请参阅以下文章以获取更多详细信息: http : //www.excel-easy.com/vba/examples/volatile-functions.html

你可以使用a = Right(Left(range(“D3”)。numberformat,3),1)来查看它是什么格式。基于它所取的string,你将能够find货币符号在细胞中显示。

您也可以将范围更改为dynamicvariables以检查您想要的任何单元格。

你可以在没有VBA的情况下,只用一个Excel公式来做到这一点,然而,有一个警告对你来说可能或者可能不重要。

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

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

最后,你可以修改这个公式来testing2位小数

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