VBA Excel查找和计数

时间:2017-12-29 13:30:55

标签: excel vba excel-vba

我想使用VBA在Excel中自动执行此功能。

  1. 从D1(np.taks-223)

  2. 获取值
  3. 搜索工作簿,检查D1中的数据(现在手动CTRL + F - > options {within:woorkbook} - >查找全部)

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

1 个答案:

答案 0 :(得分:0)

使用您在上面列出的确切步骤录制宏不会为您提供任何要查看的代码,因为“查找全部”不会产生任何代码。但是,您可以使用代码构建一个可以提供所需内容的公式,并将该公式写入$ H $ 1。这是一个包含3张工作簿的示例。 Sheet1是您的搜索值所在的位置,其他2张图表的搜索值随机分散。假设您不想在计数中包含单元格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

使用与此类似的内容,您将能够在工作簿的每个工作表中计算搜索值的所有实例。如果要在计数中包含搜索值单元格,请更改以下行:

    formulaString = formulaString & ")"

    formulaString = formulaString & ", 1)"

以便SUM将添加额外的1。

运行此代码后,我最终在单元格H1中使用以下公式:

=SUM(COUNTIF(Sheet1!2:500, $D$1),COUNTIF(Sheet2!1:500, $D$1),COUNTIF(Sheet3!1:500, $D$1))

希望这有助于你!

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