2013-07-02 2 views
1

Я новичок в VBA, и я пытаюсь написать код, который скопирует следующие данные из нескольких файлов csv, все из которых хранятся в том же каталоге.Извлечение определенных ячеек из файлов excel в указанном каталоге

мне это нужно, чтобы открыть каждый файл CSV

Check IF Роу 8 в колонках H через CA для любых клеток, которые имеют значение = "TotalLMP" (Пример: Cell H8 = "TotalLMP")

THEN скопируйте значение из строк Row 7 и Row 19 любых столбцов, которые имеют это значение = «TotalLMP» в строке 8 в двух новых столбцах (Пример: SINCE H8 = «TotalLMP», COPY H7 = «100» КАК КОЛ. A, COPY Н19 = "26,437" как колоночная B)

затем скопировать значение из ячейки $ A $ 9 в третьем столбце (Пример: скопировать A9 = "20100101" как колоночная C ")

после окончания цикла через каждый CSV файл близко и перейти к следующим

Затем в новом активном листе в пустой Excel файл будет хранить каждое значение следующим образом:

....... А. ............. B ................ C

1 .. 100 .... 26.437 .... 20100101

2 .. 200 .... 26.585 .... 20100101

+3

Если любой существующий код, который вы должны включать, что в вашем вопросе - даже если он не работает. Просто отправляя требование без каких-либо указаний, которые вы пытались решить самостоятельно, часто приводит к закрытию вопросов. –

+0

+1 комментарий Тима выше. Мы ожидаем, что вы попробовали что-то ... – brettdj

ответ

3

Позвольте мне помочь вам с циклом CSV сейчас, так как это r для начинающего. Я уверен, что вы поймете, как проверить значение в строке 8. Если нет, вы всегда можете обратиться за дополнительной помощью!

Для этого вам потребуется использовать время выполнения сценариев Microsoft Scripting.

Я предлагаю разместить все файлы csv, которые вы хотите открыть в том же каталоге, и только те, которые могут избежать потенциальных проблем.

Откройте новую книгу и перейдите к VBE (ALT + F11). Создайте новый модуль. Нажмите в этом новом модуле, затем перейдите в меню «Инструменты»> «Ссылки»> «Время выполнения сценариев Microsoft». Это позволит ему знать, что ему придется использовать этот модуль и его объекты.

Сохранить книгу как с поддержкой макросов книги (.xls или .xslm для более новых версий) в том же каталоге, что и CSV (или где-то еще ...)

Затем начать кодирование:

Sub Import_all_Csv() 
' Reference Needed: Microsoft Scripting Runtime 

' Dim some pointers to know what objects you will be manipulating thereafter 
Dim MyWs, CSV As Worksheet 
Set MyWs = ActiveSheet ' Meaning you will have to run the macro from the spreadsheet you want to export to. Feel free to replace that 
Dim wbCSV As Workbook 

' Those are the objects that belong to the reference Microsoft Scripting Runtime 
Dim oFSO As FileSystemObject 
Dim oFld As Folder 
Dim oFile As File 

Dim File As String 

' Initialize the FileSystemObject 
Set oFSO = New FileSystemObject 

' That will only work on windows so I'm adding an error handler to ignore it if need be 
On Error Resume Next 
ChDir ThisWorkbook.Path 
On Error GoTo 0 ' I'm asking VBA to throw an error now 

' Dialog box to select the first csv file (this will let you choose another directory everytime) 
File = Application.GetOpenFilename("Comma Separated Values File (*.csv*), *.csv*") 
If File = "False" Then 
    Exit Sub ' Quit the macro if user canceled 
Else 
    ' Else get the path of the parent folder of that file 
    Set oFld = oFSO.GetFolder(oFSO.GetParentFolderName(File)) 
End If 

' Go through each file in that folder 
For Each oFile In oFld.Files 

    ' Only open the CSV files 
    If oFile.Type = "Microsoft Excel Comma Separated Values File" Then 
     ' Open it and set the first sheet (There is only one anyway) 
     Set wbCSV = Workbooks.Open(oFile) 
     Set CSV = wbCSV.Sheets(1) 
     ' ============================ 
     ' Do what you want to do Here 

     ' THIS IS A PLACEHOLDER 
     ' Example to copy value of H8 in the CSV file to A2 the destination worksheet so you can see how to point to the correct cells in both files 
     MyWs.cells(1,2).value = wCSV.cells(8,8).value 

     ' End of what you want to do 
     ' ============================ 

     ' Close the CSV file without savings changes before going through the next one 
     wbCSV.Close False 

    End If 

Next oFile 

End Sub 

Надеюсь, это поможет! Удачи вам узнать больше VBA!

Бест, Julien

+1

Использование 'Dir' с подстановочным знаком намного эффективнее, проверяя FileType каждого файла в каталоге. См. Http://stackoverflow.com/questions/10380312/loop-through-files-in-a-folder-using-vba/10382861#10382861 – brettdj

+0

О, это кажется довольно крутым. Я определенно займусь этим (работает на Mac?). Благодаря! –

+0

Не эксперт по MAC VBA, поэтому не уверен :) – brettdj

Смежные вопросы