在一个文件夹中导入所有.csv的特定列

时间:2018-06-18 08:30:06

标签: excel vba excel-vba loops csv

我目前正在尝试使用excel宏,并且可能没有轻松入手。 我想将一个文件夹中的所有.csv文件中的特定列(始终是相同的列字母)导入到一个Excel工作表中。因此目前有两列感兴趣,我希望每个csv列都有一个工作表,所有文件都是新的excel列。因此,带有两个.csv列的50个csv文件将导致一个excel文件,每个文件包含两个页面和50个列。 我已经尝试了一些东西,宏目前看起来如下。它是从目录中获取所有.csv文件,然后从第2行选择列B到使用的行数并复制它,然后切换到excel文件并将其粘贴到设置标题的下一个空列中作为.csv文件名和下面粘贴的所有数据。为.cs列F完成相同的操作。之后应该关闭.csv文件,然后打开下一个文件,直到处理完目录文件为止。 目前宏在第27行失败:     视窗(f.Name).Activate 给'运行时错误9 - 索引超出范围'

Sub csv_imp()
'
' csv_imp Makro
'
' Tastenkombination: Strg+r
'

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim xl As New Excel.Application
Dim wb As New Excel.Workbook
Dim lastColumn
Dim folder
Dim rng As Range
Dim res As Workbook
Dim target As Range

Set folder = fso.getFolder("C:\data\")
Set res = Workbook("Results")
Set lastColumn = 0

For Each f In folder.Files
Debug.Print f.Name
If (f.Name Like "*.csv") Then
    Set rng = Range("B2:B60")
    rng.Copy
    Windows("Results").Activate
    Set wb = xl.Workbooks.Open(f.Path)
    wb.Sheets(1).Range(ColumnLetter(lastColumn + 1) & "1").Value = f.Name
    Set target = wb.Sheets(1).Range(ColumnLetter(lastColumn + 1) & "2")
    target.Paste
    lastColumn = lastColumn + 1
    wb.Save
    f.Close
End If

   Next
   xl.Quit
End Sub


Function ColumnLetter(ByVal ColumnNumber As Long) As String

   Dim n As Long
   Dim c As Byte
   Dim s As String
   n = ColumnNumber
Do
   c = ((n - 1) Mod 26)
   s = Chr(c + 65) & s
   n = (n - c) \ 26
   Loop While n > 0
   ColumnLetter = s

End Function

如果有人可以提供帮助,那就太棒了:) SEB

0 个答案:

没有答案