Как ссылаться на файлы, каждый в другой папке? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть 100 файлов Excel, и каждый файл находится в другой папке на диске.

Например.

file 1 = C:\DATA_DIR\TEST_1\2018_11_26.0001\Excel.xlsx  
file 2 = C:\DATA_DIR\TEST_1\2018_11_26.0002\Excel.xlsx 
file 3 = C:\DATA_DIR\TEST_1\2018_11_26.0003\Excel.xlsx
.
.
.
file 100 = C:\DATA_DIR\TEST_1\2018_11_26.0100\Excel.xlsx

В каждом файле Excel данные расположены в cell (1,1).

Я хочу взять данные из каждого файла Excel и сохранить их в одном файле Excel в одном столбце.

Код, который у меня есть, был достаточно хорош для небольшого объема данных,

a=xlsread('K:\Repeatability\C1X\2018-11-07.0001\Radial_Accuracy.xlsx'); 

b=xlsread('K:\Repeatability\C1X\2018-11-07.0002\Radial_Accuracy.xlsx'); 

N=[a(1:1,:) ; b(1:1,:)] 
xlswrite('K:\Repeatability_Test\New.xlsx',N);

В этом случае и в будущем у меня будет больше данных.Я не хочу указывать местоположение каждой папки.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018
Public Sub NonRecursiveMethod()

    Dim fso, oFolder, oSubfolder, oFile, queue As Collection
    Dim wbk As Workbook
    Dim sht As Worksheet
    Dim counter As Long

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set queue = New Collection
    queue.Add fso.GetFolder("C:\DATA_DIR\TEST_1\")

    Set sht = ActiveSheet

    counter = 1

    Do While queue.Count > 0
        Set oFolder = queue(1)
        queue.Remove 1

        For Each oSubfolder In oFolder.SubFolders
            queue.Add oSubfolder
        Next oSubfolder

        For Each oFile In oFolder.Files
            Workbooks.Open Filename:=oFile
            sht.Cells(counter, 1).Value = Cells(1, 1).Value
            counter = counter + 1
            ActiveWorkbook.Close savechanges:=False
        Next oFile
    Loop

End Sub
0 голосов
/ 26 ноября 2018

В случае, если вы можете открыть рабочие книги

Вы можете использовать функцию INDIRECT.
В столбце A вы автоматически заполняете числа от 1 до 100.
ВВ столбец B вы вводите следующую формулу, которую копируете:
=INDIRECT("'C:\DATA_DIR\TEST_1\[2018_11_26.0"&TEXT(A1,"000")&"\Excel.xlsx]Sheet1'!$A$1").

Я использовал Sheet1 в качестве имени рабочего листа, но это вы должны изменить на фактическое имя.И я предположил, что с ячейкой (1,1) вы имели в виду ячейку A1.

В качестве следующего шага я бы выбрал столбец B и скопировал / вставил как значения результаты в столбец C, чтобы избавиться от 100 ссылок на другие файлы Excel, что замедлит открытие или повторное выполнение.-счет рабочей книги каждый раз.

Два источника для решения: https://exceljet.net/formula/dynamic-workbook-reference и https://www.contextures.com/xlFunctions05.html, если вы хотите продолжить чтение или точную настройку / устранение неполадок формулы.

Но, как упоминалось выше, функция INDIRECT работает, только если открыта другая рабочая книга.Если вы закроете исходные книги и сделаете F9 в книге со всеми результатами (или снова откроете), вы снова получите #REF!, поэтому я рекомендую копировать / вставлять как значениякак только вы получите результаты.
См. также здесь: Ссылка на значение в закрытой книге Excel с использованием INDIRECT?

Обходной путь для закрытых книг

Решение в основном создает прямые ссылки на ячейки для других рабочих книг в виде текстовой строки, которую вы затем копируете / вставляете как значения, а затем нажимаете в каждой ячейке, чтобы формула «активировалась» и получала ваш результат.из другой книги, или вы используете функцию преобразования текста в столбцы Excel и делаете это автоматически.

Некоторые подробности.Снова предположим, что у вас есть числа от 1 до 100 в столбце А. Поместите это в B1: ="='C:\DATA_DIR\TEST_1\[2018_11_26.0"&TEXT(A1,"000")&"\Excel.xlsx]Sheet1'!$A$1" и скопируйте.

Теперь вам нужно выбрать этот диапазон (или весь столбец B), а затем вставить значения в столбце C. Если сейчас щелкнуть ячейку C1 и нажать Enter, вы увидите, чтоформула выполняется, и вы видите фактический результат (то есть значение в другой книге).Если у вас много ячеек, это довольно громоздко, поэтому просто выберите Столбец C, перейдите к Data > [Data Tools] Text To Columns, нажмите Finish, и все значения из разных рабочих книг появятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...