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表中的Likelihood
和Impact
列不是整数。 使用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中没有文字),则不需要Right
function并投射:
PScore = Round(cell.Offset(0, 1)) SScore = Round(cell.Offset(0, 2))