【问题标题】:VBA Function able to search through cells?VBA函数能够搜索单元格吗?
【发布时间】:2014-02-07 20:29:47
【问题描述】:

背景故事

在我的工作中,我们使用桌面日历来跟踪发生的大量随机细节:每个人的每日工作时间、发送的报告类型和数量等。为了帮助我们填写一些表格,我的老板决定他想为该月创建一个电子表格,并使其每天保持最新状态。他在这个月开始之前就去度假了,所以我一直在接替他的工作。我注意到他硬连线了总数的计算(每个人的总小时数、发送的总报告等),因此当我将日期从一月更改为二月时,我们有一些剩余的日期会导致三月。我删除了它们,然后所有公式都抛出了#R​​EF!因为它的错误。

如何设置数据很简单:

AB    2.50
CD    3.50
EF    8.00
...ETC...

AB、CD、EF 在一列中,值在相邻列中。

问题

我试图让它工作,但没有运气,所以我认为这可能是不可能的,但我想我会问一群比我更了解这个主题的人:在我制作的一个函数中我让它接受一个要搜索的字符串参数,如果找到它,它会移动到相邻的单元格并将该值添加到运行总计中。然后它在最后返回那个数字,所以对这个函数的调用类似于

=getTotals("AB")  ' this would display whatever the total for AB is

但是当我尝试这个时,我得到的只是一个#VALUE!单元格中的错误。

有没有什么方法可以让它按照我想要的方式工作,而不使用完整的宏?

函数

我让这个功能工作,我想怎么做

Function getTotal(rng As Range, search As String) As Double

    Dim r As Range

    getTotal = 0

    For Each r In rng
        If r.Value = search Then
            getTotal = getTotal + r.Offset(0, 1).Value
        End If
    Next

End Function

这样称呼它:=getTotal(A1:D2, "AD")

【问题讨论】:

  • Excel UDFS 无法更改工作表单元格...
  • @Jhecht,你能发布你的函数逻辑吗?
  • 目前还没有,它基本上是使用 cells.find() 方法来搜索工作表并汇总所有内容。有空我会发的

标签: vba excel


【解决方案1】:

SUMIF 应该可以满足您的需求:

=SUMIF(A1:A10,"AB",B1:B10)

假设您的“AB”值位于 A 列第 1-10 行,数字值位于 B 列第 1-10 行。

SUMIF 中的第一个参数是要检查的范围,第二个参数是必须满足的条件(搜索条件),第三个 [可选] 参数是从中获取值的对应范围总和。

【讨论】:

  • + 1 点! :) 甚至 Sumproduct
  • SUMIFS 如果您有超过 1 个搜索条件。
  • 我想这可能就是我想要的。我觉得很傻,因为我知道这个功能是存在的。我会告诉你的。
  • 将此标记为答案,因为它给了我这个想法
猜你喜欢
  • 2019-11-27
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多