• 締切済み

excelVBA CSVの読み込み処理について

excel2000を使用しております。 約10万行のcsvファイルを2万行づつシートを分けて読み込んで行きたいですが 可能でしょうか?  (1) テキストインポートダイアログを開いてcsvファイルを指定。  (2) 2万行づつシートに順次入力を行う。 お手数ですがご教授お願い致します。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

mitarashiさんご紹介のスレッドリンク http://okwave.jp/qa/q4557028.html?order=asc このレス#1のCopyFromRecordsetメソッドの引数MaxRowsを使用する方法が便利だと思います。 でもそのお礼欄に以下の記述があります。 >'EOFがTrueになるので、最初に戻す。 >objRes.MoveFirst >'すでに取得したデータを飛ばす。 >objRes.Move (50000 * i) これは不要ですね。 MaxRowsを指定して分割して読み込んだ場合はEOFはTrueになりません。 http://okwave.jp/qa/q5715216.html?order=asc 再掲 Sub CSV分割読み込み()   Const LIMIT As Long = 20000 '1Sheetあたりの分割数   Dim wkCon  As Object    'ADODB.Connection   Dim wkRst  As Object    'ADODB.Recordset   Dim wkPath As String   Dim wkCsv  As String   Dim wkSQL  As String   Dim ws   As Worksheet   Dim p    As Long   Dim x     x = Application.GetOpenFilename("csvFiles,*.csv")   If VarType(x) = vbBoolean Then MsgBox "cancel": Exit Sub '  With Application '    .ScreenUpdating = False '    .EnableEvents = False '    .Calculation = xlCalculationManual '  End With      p = InStrRev(x, "\")   wkPath = Left$(x, p)   wkCsv = Mid$(x, p + 1)   wkSQL = "SELECT * FROM [" & wkCsv & "];"     On Error GoTo conErr   Set wkCon = CreateObject("ADODB.Connection")   With wkCon     .Provider = "Microsoft.Jet.OLEDB.4.0"     .Properties("Extended Properties") = "TEXT;HDR=no;FMT=Delimited"     .Open wkPath   End With     On Error GoTo rsErr   Set wkRst = CreateObject("ADODB.Recordset")   wkRst.Open wkSQL, wkCon   Do While Not wkRst.EOF     Set ws = Sheets.Add     ws.Range("A1").CopyFromRecordset wkRst, LIMIT     Set ws = Nothing   Loop   wkRst.Close rsErr:   wkCon.Close conErr:   Set wkRst = Nothing   Set wkCon = Nothing   With Err()     If .Number <> 0 Then       Debug.Print .Number, .Description     End If   End With   With Application     .Calculation = xlCalculationAutomatic     .EnableEvents = True     .ScreenUpdating = True   End With End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

こんな類型の課題を質問しているようではVBAの初心者なのだろう。 それより (1)出来合いのテキストエディタにでも読みこませて20000行ごとにコピーしエクセルの各シートに貼り付ける ことを考えてはどうか。 そしてシートの操作の、データー区切り位置ー区切り文字をカンマにしてデータ各列に分離する (2)VBAにこだわるなら、「テキストファイル VBA」ででも照会して勉強のこと。それさえやってないのではないか。 難しいことをせず、開始レコード数から20000レコードを各シートのA列に読み込ます (3)そしてデーター区切り位置ー区切り文字をカンマにしてデータ各列に分離する (4)5回の操作を行う。 にとどめておくのがよかろう。 ーー 参考 Sub test01() Application.ScreenUpdating = False Open "test01.csv" For Input As #1 strt = Val(InputBox("開始=")) tanni = 20 '20レコードごとのテスト用 i = 0 Do While Not EOF(1) Line Input #1, a i = i + 1 If i >= strt And i < strt + tanni Then MsgBox i & " " & a '手sヅト確認用。本番では削除。 ActiveSheet.Cells(i - strt + 1, "A") = a Else End If Loop Close #1 Application.ScreenUpdating = False End Sub 本質問は、丸投げ依頼なので、わざと操作も必要な風にして、VBAは初等的(したがって多少面倒)な方法にしている。 20,000レコードごとに次のシートに移って全体を自動化するのはたやすいのだが。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

下記URLのNo.5がご参考になると存じます。 mySQL = "SELECT * FROM sample.csv WHERE [sample#csv].F3 = '良品'" のWHERE以降の抽出条件を取っ払えば、全件読み込みます。 http://okwave.jp/qa/q7205971.html

関連するQ&A

専門家に質問してみよう