在自定义If函数中使用相对于活动单元格的单元格内容作为条件的问题

MJJB99

我试图在Excel Visual Basic编辑器中创建我的第一个用户定义函数。我在OS X El Capitan版本10.11.1的Macbook Pro 2011上使用Excel 2011

我正在创建一个工作簿,该工作簿将使用我的函数来计算4分区格式的每桶比赛的结果。划分如下:

第一类或“一维”是最快的时间,相比最快的时间低0.499秒。

第二格或“ 2D”是下一个最快时间之后的下一个最快时间,介于0.5到0.999秒之间。

三分法或“ 3D”时间与最快时间相差1秒到1.499秒之间。

最后,第四部分或“ 4D”时间比最快时间少1.5秒或更多。

这是当前的代码,我必须弄清楚这些划分:

Function DIV(pVal)
If pVal = "Z" Then
DIV = ""
ElseIf pVal = 999 Then
DIV = "DQ"
ElseIf pVal > 100 Then
DIV = "NT"
ElseIf pVal < (Range("B2") + 0.5) Then
DIV = "X1D"
ElseIf ActiveCell.Offset(-1, 0) = "X1D" And pVal < (Range("B2") + 1) Then
DIV = "2D"
ElseIf pVal < (Range("B2") + 1) Then
DIV = "X2D"
ElseIf pVal < (Range("B2") + 1.5) Then
DIV = "X3D"
ElseIf pVal > (Range("B2") + 1.499) Then
DIV = "X4D"
Else
DIV = "Incorrect"
End If
End Function

现在,我只希望每个分区中的第一时间生成“ 2D”,“ 3D”和“ 4D”,其余时间在每个分区中的其余时间生成“ X1D”,“ X2D”,“ X3D”和“ X4D”,因为我将应用条件格式,因此以“ X”开头的任何内容都将以白色显示,因此在查看时不可见,但是,当我继续使用时,仍可以将其用于将来的功能每个部门的排名。

因此,例如,我目前正在使用2D,并且我希望所有最快时间之间相差0.5到0.999秒的时间都返回“ X2D”的结果,除了第一个,这意味着它上面的单元格会说“ X1D”。

上面代码中的所有内容均正常运行,但ElseIf应该返回“ 2D”。它返回为false,并继续到下一个ElseIf,然后在该处返回“ X2D”。

我一次删除了一部分代码,并对其进行了测试。我将问题缩小到ActiveCell.Offset部分。

在过去三天里,我一直在互联网上进行搜索,试图找出我所缺少的内容,但我找不到它。以下是我根据在网上找到的内容尝试输入的所有方式,到目前为止没有任何效果。

ElseIf ActiveCell.Offset(rowOffset:=-1, columnOffset:=0) = "X1D" And pVal < (Range("B2") + 1) Then DIV = "2D"

ElseIf pVal < (Range("B2") + 1) And ActiveCell.Offset(-1, 0) = "X1D" Then DIV = "2D"

ElseIf pVal < (Range("B2") + 1) And ActiveCell.Offset(-1, 0).Select = "X1D" Then DIV = "2D"

ElseIf pVal < (Range("B2") + 1) And ActiveCell.Offset(-1, 0).Range = "X1D" Then DIV = "2D"

ElseIf pVal < (Range("B2") + 1) And ActiveCell.Offset(-1, 0).Activate = "X1D" Then DIV = "2D"

我尝试了另一种方式,根据有人在另一个网站上的建议对它进行编码,那就是:

Function DIV(pVal)

If pVal = "Z" Then DIV = ""
If pVal = 999 Then DIV = "DQ"
If pVal > 100 Then DIV = "NT"
If pVal < (Range("B2") + 0.5) Then DIV = "X1D"
If ActiveCell.Offset(-1, 0) = "X1D" And pVal < (Range("B2") + 1) Then DIV = "2D"
If pVal < 100 Then DIV = "Correct"
If DIV = "" Then DIV = "Incorrect"

End Function

当我尝试执行此操作时,它使整个功能停止工作,并且所有结果都以“正确”的形式返回。

我完全不知该如何解决此问题,如果有人有任何建议,我将不胜感激。

谢谢!

编辑**此功能将仅在C列和C2列之外的所有C列中使用,因为C1是标题单元格,而C2始终是1D。

该函数的使用方式的具体示例:

假设有12次,每个部门3次。

始终在B2中的快速时间是15.000。

B5中的时间是15.5,这是第一个2D时间。

该函数在C5中,应首先询问B5是否=“ Z”,如果为true,则应将单元格留空;如果不为true,则应询问B5是否为= 999,如果为true,则应返回“ DQ”,否则为“ DQ”。如果为true,则应询问B5是否> 100;如果为true,则应返回“ NT”;如果为true,则应询问B5 <B2 + 0.5;如果为true,则应返回“ X1D”;如果为true,则应返回“ X1D”。询问B5是否<B2 + 0.999 AND C4 =“ X1D”,如果为true,则应返回“ 2D”;如果不是,则应询问B5 <B2 + 0.999,如果为true,则应返回“ X2D”,否则为true它应该继续询问下一个部门。如果我能找到第二部分的处理方法,则可以从中学习并能够完成其他部分的处理,并希望为我希望工作簿执行的其他操作创建新功能。

我希望这有帮助!

塞拉利昂奥斯卡

您需要重新设计函数的逻辑,而且在设计UDF时,还需要将所有变量传递它,而不是函数中分配它们我认为这是您的函数应为:

Public Function DIV(pVal As Double, testRng As Range, testX1D As Range) As String

    Dim ret As String

    If testX1D.value = "X1D" Then
        If pVal < testRng.value + 1 Then
            DIV = "2D"
            Exit Function
        End If
    End If

    Select Case CVar(pVal)
        Case "Z":                           ret = vbNullString
        Case 999:                           ret = "DQ"
        Case Is > 100:                      ret = "NT"
        Case Is < (testRng.value + 0.5):    ret = "X1D"
        Case Is < (testRng.value + 1):      ret = "X2D"
        Case Is < (testRng.value + 1.5):    ret = "X3D"
        Case Is > (testRng.value + 1.499):  ret = "X4D"
        Case Else:                          ret = "Incorrect"
    End Select

    DIV = ret

End Function

还值得注意的是,以这种方式比较值时,必须非常仔细地指定测试的顺序。例如,如果值pVal999在这种情况下:

Case 999:                           ret = "DQ"
Case Is > 100:                      ret = "NT"

它将返回“ DQ”,因为那是第一个测试,但是如果相反,则返回:

Case Is > 100:                      ret = "NT"
Case 999:                           ret = "DQ"

您会得到“ NT”,因为pVal大于100。请记住一点...


要使用此UDF

例如,在C5中输入的公式,其中pVal是B5中的值

=DIV(B5,C4,$B$2)

(请注意B2的绝对参考)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在自定义If函数中使用相对于活动单元格的单元格内容作为条件的问题

来自分类Dev

在Swift中使用prepareForSegue方法传递自定义单元格内容的问题

来自分类Dev

相对于单元格添加按钮?

来自分类Dev

获取表单元格相对于行的索引

来自分类Dev

设置表格单元格相对于列中其他单元格的宽度

来自分类Dev

如何获取Google Sheet条件格式自定义公式来引用相对单元格?

来自分类Dev

dojo dgrid自定义渲染单元格内容

来自分类Dev

自定义TableView单元格,检查条件

来自分类Dev

UISearchController的自定义单元格

来自分类Dev

自定义单元格标签

来自分类Dev

自定义单元格重复

来自分类Dev

在自定义函数中获取单元格对象

来自分类Dev

更新不同单元格中的自定义函数

来自分类Dev

如何使用Swift在UICollectionView单元格中加载自定义单元格(xib)

来自分类Dev

使用自定义单元格创建多个部分

来自分类Dev

使用自定义单元格获取UITableViewCell indexPath

来自分类Dev

可重复使用的自定义单元格

来自分类Dev

使用自定义单元格从搜索更新tableView

来自分类Dev

使用UIView的自定义表格视图单元格

来自分类Dev

如何在Swift中使用搜索栏过滤具有自定义单元格的UITableView的内容?

来自分类Dev

如何使NSTableView使用混合自定义单元格视图的自定义单元格视图?

来自分类Dev

将自定义功能复制到其他单元格(更改活动单元格)

来自分类Dev

如何使用按钮标签快速访问自定义单元格的内容?

来自分类Dev

使用自定义UITableViewCell中的按钮获取单元格字符串的问题

来自分类Dev

使用自定义公式引用单元格本身的条件格式

来自分类Dev

如何在ListView中使用自定义单元格下载fxml?

来自分类Dev

在iOS中使用自定义单元格时无法查看UITableViewCell

来自分类Dev

如何在自定义单元格中使用didFinishEditing(textField)?

来自分类Dev

如何使用存储在相对于另一个单元格中的值的位置中的信息填充一个单元格?

Related 相关文章

  1. 1

    在自定义If函数中使用相对于活动单元格的单元格内容作为条件的问题

  2. 2

    在Swift中使用prepareForSegue方法传递自定义单元格内容的问题

  3. 3

    相对于单元格添加按钮?

  4. 4

    获取表单元格相对于行的索引

  5. 5

    设置表格单元格相对于列中其他单元格的宽度

  6. 6

    如何获取Google Sheet条件格式自定义公式来引用相对单元格?

  7. 7

    dojo dgrid自定义渲染单元格内容

  8. 8

    自定义TableView单元格,检查条件

  9. 9

    UISearchController的自定义单元格

  10. 10

    自定义单元格标签

  11. 11

    自定义单元格重复

  12. 12

    在自定义函数中获取单元格对象

  13. 13

    更新不同单元格中的自定义函数

  14. 14

    如何使用Swift在UICollectionView单元格中加载自定义单元格(xib)

  15. 15

    使用自定义单元格创建多个部分

  16. 16

    使用自定义单元格获取UITableViewCell indexPath

  17. 17

    可重复使用的自定义单元格

  18. 18

    使用自定义单元格从搜索更新tableView

  19. 19

    使用UIView的自定义表格视图单元格

  20. 20

    如何在Swift中使用搜索栏过滤具有自定义单元格的UITableView的内容?

  21. 21

    如何使NSTableView使用混合自定义单元格视图的自定义单元格视图?

  22. 22

    将自定义功能复制到其他单元格(更改活动单元格)

  23. 23

    如何使用按钮标签快速访问自定义单元格的内容?

  24. 24

    使用自定义UITableViewCell中的按钮获取单元格字符串的问题

  25. 25

    使用自定义公式引用单元格本身的条件格式

  26. 26

    如何在ListView中使用自定义单元格下载fxml?

  27. 27

    在iOS中使用自定义单元格时无法查看UITableViewCell

  28. 28

    如何在自定义单元格中使用didFinishEditing(textField)?

  29. 29

    如何使用存储在相对于另一个单元格中的值的位置中的信息填充一个单元格?

热门标签

归档