VBA基本算法不起作用

TurgidWizard

我在excel中有风险热图。我有一个公式,该公式应考虑每个参考的概率和影响,并将其放在表中的适当单元格中。看起来像这样:

Function ProbSevScore(Prob As Integer, Sev As Integer, Nbr As Range)
Application.Volatile True
Dim cell As Range

ProbSevScore = ""

For Each cell In Nbr
PScore = Right(cell.Offset(0, 1), 1) + 0
SScore = Right(cell.Offset(0, 2), 1) + 0
If PScore = Prob Then
If SScore = Sev Then
If Len(ProbSevScore) > 0 Then
ProbSevScore = ProbSevScore & ","
End If
ProbSevScore = ProbSevScore & cell.Value
End If
End If
Next cell

End Function

它是本教程视频中概述的算法的副本:https : //www.youtube.com/watch?v=_XqCX4pKFPM

我的地图有些细微的差别,概率和严重性称为不同的事物,并且轴反转了,但是这些事物并不重要。

当我尝试使用此公式时,在运行该函数的单元格中什么都没有出现。它留为空白,没有#VALUE错误或其他任何内容。

我究竟做错了什么?我是否复制了错误的代码?该算法在视频中起作用!这段代码对你们有用吗?

我调用函数: 在此处输入图片说明

文件:https : //www.sendspace.com/file/liw29j

尼克失踪

UDF不适用于您,因为输入表中的LikelihoodImpact列不是整数。随着General应用的格式,表格看起来像这样:

在此处输入图片说明

VBA代码的这一部分:

PScore = Right(cell.Offset(0, 1), 1) + 0
SScore = Right(cell.Offset(0, 2), 1) + 0

剪切单元格值的最后一个字符(不显示带格式的文本)并将其转换为整数,因此对于您的样本数据,第一对为9,1(not 3,2

要解决它,您应该在UDF中将输入数据转换为整数:

PScore = Right(Round(cell.Offset(0, 1)), 1) + 0
SScore = Right(Round(cell.Offset(0, 2)), 1) + 0 

如果您的数据仅包含数字(而不是教程视频中的文本),则不需要该Right函数和强制转换:

PScore = Round(cell.Offset(0, 1))
SScore = Round(cell.Offset(0, 2)) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章