VBA Excel查找和计数

VBA Excel查找和计数,vba,excel,Vba,Excel,我想使用VBA在Excel中自动化此功能 从D1 np获取值。taks-223 搜索工作簿,现在手动检查D1中的数据CTRL+F->options{within:woorkbook}->Find All 统计工作簿中的数据出现的次数, 将结果写入单元格H1 我是否可以用Makro或其他方式实现此功能? 我最近一直在使用excel,还没有找到答案。 谢谢:使用上面列出的确切步骤录制宏不会提供任何代码供查看,因为“全部查找”不会生成任何代码。但是,您可以使用代码构造一个公式,该公式将为您提供所需的内

我想使用VBA在Excel中自动化此功能

从D1 np获取值。taks-223

搜索工作簿,现在手动检查D1中的数据CTRL+F->options{within:woorkbook}->Find All

统计工作簿中的数据出现的次数, 将结果写入单元格H1 我是否可以用Makro或其他方式实现此功能? 我最近一直在使用excel,还没有找到答案。
谢谢:

使用上面列出的确切步骤录制宏不会提供任何代码供查看,因为“全部查找”不会生成任何代码。但是,您可以使用代码构造一个公式,该公式将为您提供所需的内容,并将该公式写入$H$1。下面是一个包含3张工作表的工作簿示例。Sheet1是搜索值所在的位置,其他两张图纸的搜索值随机分布在各处。假设您不想在计数中包含单元格D1,您可以执行以下操作:

Sub countValueInWorkbook()
    Dim formulaString As String

    '//If you put your formula in any cell of Row 1, you will have a circular reference.
    '//Start your formula with the sheet the search value cell is on, and count rows 2 thru 500 (or something)
    formulaString = "=SUM(COUNTIF(Sheet1!2:500, $D$1),"

    For Each wksht In ThisWorkbook.Sheets
        If wksht.Name <> "Sheet1" Then
            formulaString = formulaString & "COUNTIF(" & wksht.Name & "!1:500, $D$1),"
        End If
    Next wksht

    '//Trim trailing comma and add ending parenthesis
    formulaString = Left(formulaString, Len(formulaString) - 1)
    formulaString = formulaString & ")"

    '//Write formula to desired cell
    Sheets("Sheet1").Range("$H$1").Value = formulaString
End Sub

因此,总和将加上额外的1

运行此代码后,我在单元格H1中得到以下公式:

=SUM(COUNTIF(Sheet1!2:500, $D$1),COUNTIF(Sheet2!1:500, $D$1),COUNTIF(Sheet3!1:500, $D$1))
希望这对你有帮助


编辑为使用搜索单元格本身而不是静态值来显示,这样当您更改D1中的内容时,H1中的公式将更新以计算新值。

尝试在手动录制宏的同时录制宏,它将为您提供启动代码。如果您需要代码方面的帮助,请在此时创建有关堆栈溢出的问题。不确定是否需要VBA。您应该能够通过公式实现这一点。作为一个起点,看看CountIFGood idea braX之类的东西-这里有一些详细的信息:和Use=Countif函数非常感谢您,我将尝试您的解决方案:DY您的解决方案非常好,但我没有描述它应该如何工作。如果值在d2中,则结果将写入h2中,并仅在之前计数。这样地
    formulaString = formulaString & ", 1)"
=SUM(COUNTIF(Sheet1!2:500, $D$1),COUNTIF(Sheet2!1:500, $D$1),COUNTIF(Sheet3!1:500, $D$1))