首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在VBA函数中传递Excel范围,进程作为数组,并返回结果

在VBA函数中传递Excel范围,进程作为数组,并返回结果
EN

Stack Overflow用户
提问于 2014-02-09 10:49:51
回答 3查看 1.9K关注 0票数 1

我有一个Excel工作表,列中有一些字符串。有时所有条目都是相同的,有时不是:

我编写了一个函数,将范围作为参数传递:

代码语言:javascript
运行
AI代码解释
复制
=Dent_WG(A1:A6)

VBA函数应确定哪种情况为真(所有条目= "Al",或至少一个条目= "Ag"),然后分别返回0或12:

代码语言:javascript
运行
AI代码解释
复制
Function DentWG(WG_Mat As Range) As Single

    Dim dat As Variant, rw As Variant, temp As Single
    dat = WG_Mat
    temp = 0
    
    For rw = LBound(dat, 1) To UBound(dat, 1)
        If dat(rw, 1) = "Ag" Then
            temp = 12
        End If
    Next

    If temp = 12 Then
        DentWG = 12
    Else
        DentWG = 0
    End If

End Function

但是,函数总是返回0,即使在第二种情况下,"Ag“出现在范围内。我确信我未能正确地将范围转换为数组,或者将预期的逻辑正确地应用于该数组。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-09 11:37:30

从你的问题..。

VBA函数应确定哪种情况为真(所有条目= "Al",或至少一个条目= "Ag"),然后分别返回0或12:

这就是你所需要的。

代码语言:javascript
运行
AI代码解释
复制
Function DentWG(WG_Mat As Range) As Long 
    Dim ClCount As Long

    ClCount = WG_Mat.Cells.Count

    If Application.WorksheetFunction.CountIf(WG_Mat, "Al") = ClCount Then
        DentWG = 0
    ElseIf Application.WorksheetFunction.CountIf(WG_Mat, "Ag") > 0 Then
        DentWG = 12
    End If
End Function

同样的方法可以用一个公式来实现。

=IF(COUNTIF(A1:A6,"Al")=(ROWS(A1:A6)*COLUMNS(A1:A6)),0,IF(COUNTIF(A1:A6,"Ag") > 0‌​,12,""))

如果总是1列,那么就不需要*COLUMNS(A1:A6)了。这样就行了。

=IF(COUNTIF(A1:A6,"Al")=ROWS(A1:A6),0,IF(COUNTIF(A1:A6,"Ag") > 0,12,""))

ScreenShot

票数 2
EN

Stack Overflow用户

发布于 2014-02-09 11:03:01

这对我来说很管用:

代码语言:javascript
运行
AI代码解释
复制
Function DentWG(WG_Mat As Range) As Single
    Dim result As Single, cl as Range
    result = 0

    For Each cl In WG_Mat
        If cl = "Ag" Then
            DentWG = 12
            Exit Function
        End If
    Next cl

    DentWG = result
End Function
票数 2
EN

Stack Overflow用户

发布于 2014-02-09 11:18:05

你并不需要一个UDF来完成这个任务。你可以说:

=IF(COUNTIF(A1:A6,"Ag")>=1,12,0)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21663348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档