2017-01-31 10 views
0

ディレクトリ内のすべてのcsvファイルからデータをエクスポートして1つの新しいブックに格納する次のコードを作成しました。より少ないデータ数でも動作しますが、何千もの行がある場合は動作しません。VBA:1つのブックから別のブックにセルをコピーして大きいデータでは機能しない

Sub Button4_Click() 
Dim CSVPath 
Dim thisWb As Workbook 
Dim wkb As Excel.Workbook 
Dim CSVUsed As Range 
Dim i As Integer 

Set thisWb = ActiveWorkbook 
Workbooks.Add 
ActiveWorkbook.SaveAs Filename:=thisWb.Path & "\new_workbook.xls" 
'ActiveWorkbook.Close savechanges:=False 
Set FS = CreateObject("Scripting.FileSystemObject") 
CSVPath = ThisWorkbook.Path & "\CSV" 
If Not FS.FolderExists(CSVPath) Then 
    MsgBox "CSV folder does not exist." 
    Exit Sub 
End If 
Set thisWb = ActiveWorkbook 
For Each file In FS.GetFolder(CSVPath).Files 
    If Right(file.Name, 3) = "csv" Then 
     Set wkb = Application.Workbooks.Open(file.Path) 
     Set CSVUsed = wkb.Sheets(1).UsedRange 
     For i = 1 To CSVUsed.Rows.Count 
     For j = 1 To CSVUsed.Columns.Count 
     thisWb.Sheets(1).Cells(j, i).Value = CSVUsed.Cells(j, i).Value 
     Next 
     Next 
    End If 
    Next 

End Sub 

名前として列の数が固定されていない、私は範囲を使用しませんでした。 誰かが助けることができますか?

+1

VBAはVB.NETではありません。タグを誤用しないでください。 – Steve

+1

vba:VB.NETではなく、VB.NETと同じです。 – Plutonix

+1

Dim i長くても、jは長さが –

答えて

1

私は、引数が,Columnだと思います。 Column,。これらの行

For i = 1 To CSVUsed.Rows.Count 
    For j = 1 To CSVUsed.Columns.Count 
    thisWb.Sheets(1).Cells(j, i).Value = CSVUsed.Cells(j, i).Value 

を読んで、私はあなたが行と列を入れ替えてきたと信じています。行と列の数がプルーフィングに十分近づけない限り、小さなケースではうまくいくのは驚きです。あなたは整数としてそれを定義した場合も、ijlong代わりの

intする必要があり、最大値は32,768になり、あなたはそれよりも大きいデータセット場合 あなたのカウントの問題を引き起こす可能性があります。 -VBA Pete

カラムの最大値は16,384ですが、1,048,576行になる可能性があります。

関連する問題