【问题标题】:vba code that is in several cells and checks several ranges位于多个单元格中并检查多个范围的 vba 代码
【发布时间】:2020-03-23 20:02:38
【问题描述】:

谁能帮忙 我在几个单元格中有这个公式,检查了几个范围! 有没有办法将其转换为 VBA,这样我只需在每个单元格中选择一个范围?

感谢您的帮助。

=IF(COUNTIF(BE95:BE99;"Falhou")>0;"Falhou";IF(COUNTIF(BE95:BE99;"Falhou Condicionamente")>0;"Falhou Condicionamente";IF(COUNTIF(BE95:BE99;"Passou Condicionamente")>0;"Passou Condicionamente";IF(COUNTIF(BE95:BE99;"Passou")>0;"Passou"))))

【问题讨论】:

  • 你能解释一下“我只需要在每个单元格中选择一个范围”是什么意思吗?
  • 创建一个 vba 公式,结果与 if 相同。在我拥有的 excel 公式中,我需要选择多次相同范围的单元格!我正在尝试的是一个 vba 公式,这样我只需要选择一次单元格范围!对不起,如果我不能很好地解释!

标签: excel vba excel-formula


【解决方案1】:

也许这就是你想要的,为了让它工作,让我们插入一个模块并将这段代码放入这个模块中。

然后只需输入以下公式:

= Test (BE95: BE99)

Function test(rng As Range)
Dim str As Variant
    For Each str In Array("Falhou", "Falhou Condicionamente", "Passou Condicionamente", "Passou")
        If Not IsError(Application.Match(str, rng, 0)) Then test = str:Exit for 'if match exist then return value
    Next str
End Function

【讨论】:

  • 感谢它有效,我只需要更改结果的顺序!
  • 在 Next str 之前没有 Exit For 吗?
  • @VBasic2008 正确!我会按照你的建议修复它
【解决方案2】:

下面的函数有一个你的工作表函数没有的特性:如果范围不包含 4 个计数条件,它会返回“Falhou”。

Function Passou(Rng As Range) As String

'    '=IF(COUNTIF(BE95:BE99;"Falhou")>0;"Falhou";
'    IF(COUNTIF(BE95:BE99;"Falhou Condicionamente")>0;"Falhou Condicionamente";
'    IF(COUNTIF(BE95:BE99;"Passou Condicionamente")>0;"Passou Condicionamente";
'    IF(COUNTIF(BE95:BE99;"Passou")>0;"Passou"))))

    Dim Sp() As String
    Dim i As Integer

    Sp = Split("Falhou,Falhou Condicionamente,Passou Condicionamente,Passou", ",")
    For i = UBound(Sp) To 1 Step -1
        If Application.CountIf(Rng, Sp(i)) Then Exit For
    Next i
    Passou = Sp(i)
End Function

从指定要搜索的范围的工作表中调用 UDF。

= Passou($BE$95:$BE$99)

范围的绝对寻址允许跨行和列复制公式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多