【问题标题】:Copying the big data from csv to excel将大数据从csv复制到excel
【发布时间】:2016-03-24 18:27:58
【问题描述】:
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 中。

请帮助我解决这个问题。

【问题讨论】:

  • ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value = wshS.Range(wshS.Cells(1, 1), wshS.Cells(LastRow, LastCol)).Value 替换你的循环并尝试它是否足够快。
  • 嗨,Axel,效果很好。复制在几分之一秒内完成。谢谢....

标签: vba excel


【解决方案1】:

如果需要将值从一个工作表复制到另一个工作表但保存目标工作表的格式,那么您可以将整个值数组从源范围分配到目标范围。

例子:

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

这对我来说更快,但这可能是一种主观印象。

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多