如何在 Excel 中搜索多个文件中同一行文本对应的值?

如何在 Excel 中搜索多个文件中同一行文本对应的值?

我知道这是一个公然的求助帖子,但是我已经被赋予了这项任务,但我不知道如何及时完成它。

我对 Excel 有一定的了解,但不懂 VBA。我学过 C++,所以我理解代码,尤其是代码背后的逻辑。

需要完成的任务是:我们是一家销售益智玩具的小型初创公司。总共有 8 种产品。所以显然没有人记录我们按商品销售的商品。我们有超过 200 张列出每笔交易的发票。现在我需要一种方法来在所有这些文件中搜索文本字符串,例如“超级用户”,然后为我提供旁边列中的数字(用于特定格式的发票)和右侧第 3 列(如果使用 vlookup,则为列索引号 4)中的数字(用于另一种格式)。是的,出于某种原因,我们有两种格式。我可以将这两种格式分成不同的文件夹。

有什么方法可以做到这一点,而不必手动打开每个文件然后进行记录?

dit:所有文件都是 excel,它们看起来像这样https://i.stack.imgur.com/nk09x.jpg(不幸的是,这是一个 pdf 导出,我目前无法访问原始内容)图片我需要的是,如果要找到的字符串是 EDGE - Jungle Safari,那么我需要值 64 和值 10。基本上是相应行中 QTY 下的值。

答案1

初始设置

我构建了一个小示例,应该可以帮您找到所需的内容。首先,我在一个文件夹中设置了几个 excel 文件,其中一些包含字符串“abc”,而另一些则不包含。我将一些包含不止“abc”的文件放在同一个工作簿中的不同工作表中。这应该可以准确模拟您所拥有的内容。

向您展示完成后的工作原理

在此处输入图片描述

您必须提供初始目录,就像我在单元格 A2 中提供的一样。

编码

我们最初设置了一个循环来遍历所有 excel 文件,代码如下:

fileName = Dir(directory & "*.xl??")

找到每个文件名后,我们使用以下命令打开它:

Dim wbk As Workbook
With wbk
Set wbk = Workbooks.Open(directory & fileName)
End With

打开每个工作簿时,我们使用 cells.find 命令搜索字符串并在每个工作表中执行此操作。如果匹配,则将变量计数器增加一:

For Each sh In wbk.Worksheets
    Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)

    If Not found Is Nothing Then
       sh.Activate
       found.Select
       count = count + 1
       Else
    End If
Next sh

最后,请确保在转到下一个工作簿之前关闭每个工作簿,这样我们就不会出现打开太多工作簿而导致的内存问题:

wbk.Close

以下是所有代码:

Sub LoopThroughFiles()
Range("'Sheet1'!A6:A10000").ClearContents

Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer
directory = "C:\Users\wzcj9x\Desktop\New folder\"
fileName = Dir(directory & "*.xl??")



i = 5
Do While fileName <> ""

i = i + 1

If fileName <> "" Then
Dim wbk As Workbook
With wbk
Set wbk = Workbooks.Open(directory & fileName)
End With


Dim sh As Worksheet
Dim found As Range
Dim count As Integer

For Each sh In wbk.Worksheets
    Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)

    If Not found Is Nothing Then
       sh.Activate
       found.Select
        count = count + sh.Range(found.Address).Offset(0, 3).Value
       Else
    End If
Next sh
wbk.Close
End If



fileName = Dir()

Loop

Range("'Sheet1'!C2").Value = count

End Sub

您只需运行宏,它就会为您生成计数。如果您只想为每个工作簿生成 1 个计数,而不管它在工作簿中存在多少次,那么修改我的计数方法应该非常容易。

如果您有任何疑问,请告诉我,但希望这至少能帮助您走上正确的道路。

更新

我更新了我的问题,返回找到的单元格右侧 3 个单元格的值,并将它们全部相加。这与提问者的新更新相符。

根据评论进行另一次更新

我修改了代码,只对每个工作簿符合条件的最大值求和,然后将这些值相加:

Dim max As Integer

max = 0

For Each sh In wbk.Worksheets

    Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)

    If Not found Is Nothing Then
       sh.Activate
       found.Select

       If sh.Range(found.Address).Offset(0, 3).Value > max Then
       max = sh.Range(found.Address).Offset(0, 3).Value
       End If

       Else
    End If
Next sh

      count = count + max

wbk.Close

相关内容