|
大量のcsvファイルを読み込む処理で以下の処理を利用していますが
Application.GetOpenFilenameファイルを読み込む画面が出る前にエクセルが
固まある時があります。普通に動くときもります。
件数が多いことから発生するものなのか?
何かの記述が抜けているものなのか?
どなたか教えてもらえませんか?
csvファイルを読み込むのが早くで助かる処理なので活用したい
Public Sub Samp1()
Dim vFile As Variant
Dim ffn As Integer
Dim sBuf As String
Dim vA As Variant, iP(1) As Long
Dim i As Long, j As Long, k As Long
Const CROWSZ As Long = 50000 ' 1回の書き出し行数
vFile = Application.GetOpenFilename("CSV Files(*.csv), *.csv")
If (VarType(vFile) <> vbString) Then Exit Sub
vA = InputBox("開始行,終了行", "取込み範囲指定", "10,1000010")
If (Len(vA) = 0) Then Exit Sub
vA = Split(vA, ",")
If (UBound(vA) < 1) Then Exit Sub
iP(0) = Int(Val(vA(0)))
iP(1) = Int(Val(vA(1)))
If (iP(0) > iP(1)) Then Exit Sub
If (iP(1) - iP(0) + 1 > Rows.Count) Then Exit Sub
ReDim vA(1 To CROWSZ, 1 To 1)
Application.ScreenUpdating = False
Worksheets.Add
ffn = FreeFile()
Open vFile For Input As #ffn
i = 1
While ((Not EOF(ffn)) And (i < iP(0)))
Line Input #ffn, sBuf
i = i + 1
Wend
k = 1
j = 0
While ((Not EOF(ffn)) And (i <= iP(1)))
If (j >= CROWSZ) Then
Cells(k, "A").Resize(CROWSZ).Value = vA
k = k + CROWSZ
j = 0
End If
j = j + 1
Line Input #ffn, vA(j, 1)
i = i + 1
Wend
If (j > 0) Then Cells(k, "A").Resize(j).Value = vA
Close #ffn
If ((j > 0) Or (k > 1)) Then
With Columns("A")
.TextToColumns .Cells(1), xlDelimited, Comma:=True
End With
Else
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
Application.ScreenUpdating = True
End Sub
|
|