excel 用于搜索字符串并在返回行中对活动列中的所有值求和的函数

yftpprvb  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(97)

我是Excel VBA的新手,试图设置一个个性化的功能来帮助我保持团队工作能力的概览。到目前为止不成功:/多一点细节:
我有一个Excel工作表,在单独的列中显示一年中的几周,在行中显示项目(和人名)。

该表包含两部分:
1.在上半部分,我想显示一个概述,显示在某个星期的个人已经计划的天数总和。
1.在下半部分,我想给予每个项目相关人员的缩写(在B列),然后在以下各列中给出这个人本周在这个项目上工作的天数。
现在我想为工作表的第一部分定义一个个性化函数,例如单元格C5(字符串PW和第1周),它可以在B12到B1000范围内查找字符串“PW”。如果在特定行ROW 1中找到该字符串,则应使用此行号来标识周列中的天数-在本例中为“C”。然后,应使用所有找到的字符串“PW”来获取列C中所有行的值(天)。示例:C5中的函数应返回6,D5中的函数应返回3,C6中的函数应返回5,依此类推。
我写了一些代码,如果我在sub中调用它,它也能工作。但是,如果我在工作表中调用它,它会给我一个值错误。从函数向导中调用函数,当我插入最后一个输入时,它会给我一个错误。这是调用函数的单元格的ID。我试图用Application.Caller.Address替换它,但总是得到一个错误:/

Public Function SumName(shortName As String, lookupRange As Range, Caller As Range) As Double

Dim iCol As Integer
Dim Days As Long
Dim nameFind As Range
Dim myCol As String
Dim myRow As Double

Application.Volatile

Days = 0

Cell_called = Split(Caller.Address, "$")
myCol = Cell_called(1)
'Debug.Print myCol

With lookupRange
    Set nameFind = .Find(What:=shortName, _
                            LookAt:=xlWhole, _
                            MatchCase:=False, _
                            SearchFormat:=False)
        firstFind = nameFind.Address
    If Not nameFind Is Nothing Then
        Do
            Cell_found = Split(nameFind.Address, "$")
            myRow = Cell_found(2)
            
            Days = Days + Range(myCol & myRow).Value
            Set nameFind = .FindNext(nameFind)
            
            If nameFind.Address = firstFind Then Exit Do
        Loop While Not nameFind Is Nothing
    End If
End With

SumName = Days

End Function

现在我有点糊涂了,谁能告诉我我做错了什么?
干杯,黛丝蕾

jbose2ul

jbose2ul1#

您不需要VBA来执行此操作
第一部分就放一个“sumif”
例如,在单元格C5中输入
=求和平均值(B12:B25,B5,C12:C25)
等等
此公式将对C(12到25)列中的单元格求和,这些单元格在B列(12到25)中的名称等于B5的值

相关问题