2016-03-24 9 views
0
Public Function Import_CSV (SheetName) As String 

    Dim ws As Worksheet, strFile As String 
    Set ws = ActiveWorkbook.Sheets(SheetName) 'set to current worksheet name 
    strFile = Application.GetOpenFilename("CSV Files (*.csv),*.csv", , "Please selec .csv file...") 

    Dim wbkS As Workbook 
    Dim wshS As Worksheet 
    Dim wshT As Worksheet 
    Set wbkS = Workbooks.Open(Filename:=strFile) 
    Set wshS = wbkS.Worksheets(1) 
    LastRow = wshS.UsedRange.Rows.Count 
    LastCol = wshS.UsedRange.Columns.Count 

    With ws 
     For i = 1 To LastRow Step 1 
      For j = 1 To LastCol Step 1 
       .Cells(i, j).Value = wshS.Cells(i, j) 
      Next 
     Next 
    End With 
    wbkS.Close 

    ActiveWorkbook.Save 

End Function 

私は上記のコードを.csvファイルからExcelシートにコピーすることを試みました。私のCSVファイルは大きくなっています(2000行と2000列)。その時間がかかる。多くの時間をかけずにデータをExcelにコピーできる他の方法はありますか?大きなデータをcsvからExcelにコピー

この問題について私を助けてください。

+1

ループを と置き換えます。ws.Range(ws.Cells(1,1)、ws.Cells(LastRow、LastCol))。値= wshS.Range(wshS.Cells(1,1)、wshS)。 Cell(LastRow、LastCol))。値が と十分速ければ試してください。 –

+0

こんにちはアクセル、それは完璧に働いた。コピーは数秒で実行されます。ありがとう.... – surendra

答えて

0

値をあるワークシートから別のワークシートにコピーするが、宛先ワークシートの形式を保存する必要がある場合は、ソース範囲から宛先範囲全体の値配列を割り当てることができます。

例:あなたは非常に大きなアレイとメモリの問題に遭遇することがありこれにより

Sub test() 

Set ws = Worksheets(2) 
Set wshS = Worksheets(1) 

LastRow = 2000 
LastCol = 2000 

ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value = wshS.Range(wshS.Cells(1, 1), wshS.Cells(LastRow, LastCol)).Value 

End Sub 

または、クリップボードを使用して値にのみ特殊文字を貼り付けることができます。

例:

Sub test2() 

Set ws = Worksheets(2) 
Set wshS = Worksheets(1) 

LastRow = 2000 
LastCol = 2000 

wshS.Range(wshS.Cells(1, 1), wshS.Cells(LastRow, LastCol)).Copy 
ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).PasteSpecial Paste:=xlPasteValues 

Application.CutCopyMode = False 

End Sub 

これは、より速く私のためであるが、これは主観的な印象である可能性があります。

関連する問題