Я знаю, что это откровенно помогает мне опубликовать, но мне дали эту задачу, и я не знаю, как сделать это вовремя.

У меня есть умеренные знания Excel, но я не знаю VBA. Я изучил C++, поэтому я понимаю код и особенно логику кода.

Задача, которая должна быть выполнена: Мы - маленький стартап, который продает развивающие игрушки. Всего 8 товаров. Таким образом, очевидно, никто не вел подсчет наших проданных товаров мудро. У нас есть более 200 счетов, которые перечисляют каждую транзакцию. Теперь мне нужен способ поиска во всех этих файлах текстовой строки, например, "superuser", а затем дать мне номер в столбце рядом с ним для определенного формата счетов и в столбце 3 справа (индекс столбца номер 4, если используется vlookup) для другого формата. Да, у нас есть два формата по какой-то причине. Я могу разделить два формата в разные папки.

Есть ли способ сделать это, не открывая каждый файл вручную, а затем вести учет?

dit: все файлы превосходны, и они будут выглядеть следующим образом: http://imgur.com/L0anPQ6 (это, к сожалению, экспорт в PDF, в настоящее время я не могу получить доступ к оригиналу). Рисунок - Jungle Safari, тогда мне нужно значение 64 и значение 10. В основном значение в QTY в соответствующей строке.

1 ответ1

1

Начальная настройка

Я создал небольшой пример, который должен дать вам то, что вы ищете. Сначала я установил несколько файлов Excel в одну папку, где некоторые содержат строку "abc", а некоторые нет. Я положил некоторые, которые имеют больше, чем просто "abc" и в разных листах в одной книге. Это должно имитировать именно то, что у вас есть.

Показываю, как это работает после завершения

Вы должны предоставить начальный каталог, как у меня в ячейке A2.

Кодировка

Мы изначально настроили цикл для просмотра всех файлов, которые являются файлами Excel, с этой строкой:

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

Поскольку каждое имя файла найдено, мы открываем его, используя это:

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

С каждой открытой книгой мы используем команду cell.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 ячейки справа от найденной ячейки, и добавить их все вместе. Это соответствует новому обновлению вопроса asker.

Еще одно обновление на основе комментариев

Я изменил свой код, чтобы суммировать только максимальное значение, которое соответствует критериям для рабочей книги, а затем добавить только эти значения вместе:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .