Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


60 / 13274 ツリー ←次へ | 前へ→

【80315】csvファイルの読み込み大量データ 煮っまった 19/1/24(木) 10:52 質問[未読]
【80328】Re:csvファイルの読み込み大量データ よろずや 19/1/24(木) 21:34 発言[未読]
【80348】Re:csvファイルの読み込み大量データ 煮詰まった 19/1/28(月) 9:32 お礼[未読]

【80315】csvファイルの読み込み大量データ
質問  煮っまった  - 19/1/24(木) 10:52 -

引用なし
パスワード
   大量の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

【80328】Re:csvファイルの読み込み大量データ
発言  よろずや  - 19/1/24(木) 21:34 -

引用なし
パスワード
   思いつくままに感想を書きます。

変数 vA が複数の用途に使用されている。
これは、後日見直した時にロジックを見通す妨げになる。
また vA を最後に開放した方がいいような気がする。

InputBox 関数で数値を文字列として取得しているが、
数字かどうかのチェックがなされていない。
Application.InputBox メソッドを使えば、
数値しか入力出来ない様な制限を掛けることができる。

Worksheets.Add でワークシートを追加してるが、
これではマクロブックにデータを書き込む形なので関心しない。
データは新しいブックに書き込んだ方が好ましいと思う。

そんなところかな。
結構よく出来てると思いますよ。

【80348】Re:csvファイルの読み込み大量データ
お礼  煮詰まった  - 19/1/28(月) 9:32 -

引用なし
パスワード
   VAの解放は入れてみます。
データは新しいブックに書き込んだ方が好ましいと思う
⇒改善してみます。

ありがとうございました。

60 / 13274 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free