在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)
- testSheet是候选工作表
-
CELL("format",
参数返回货币格式化单元格的,[decimal places]
-
LEFT(...,1)
返回string中数字2的第一个字母 -
IF
包装器说如果格式的第一个字符是,
那么1,否则0。 - 这里的警告 ,格式可能是
£
或$
或任何其他符号,所以我不知道是否有必要进行testing。
最后,你可以修改这个公式来testing2位小数
=IF(LEFT(CELL("format",testSheet!D2),2)=",2",1,0)