VBA基本algorithm不起作用

我有一个在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 

它是本教程video中概述的algorithm的副本: https : //www.youtube.com/watch?v = _XqCX4pKFPM

我在地图上有一些细微的差别,概率和严重程度被称为不同的东西,轴线被颠倒,但这些东西并不重要。

当我尝试使用这个公式时,在我运行函数的单元格中没有任何内容出现。它留空,没有#VALUE错误或任何东西。

我究竟做错了什么? 我是否错误地复制了代码? 该algorithm在video中起作用! 这个代码是否适合你们?

我打电话function: 在这里输入图像说明

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

UDF不适合你,因为input表中的LikelihoodImpact列不是整数。 使用General格式,表格如下所示:

在这里输入图像说明

这部分VBA代码:

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

剪切单元格值的最后一个字符(不显示格式化文本)并将其转换为整数,所以对于您的示例数据,第一对是9,1 (不是3,2

要解决这个问题,你应该把input数据转换成UDF中的整数:

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

如果您的数据仅包含数字(并且在教程video中没有文字),则不需要Rightfunction并投射:

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