• ベストアンサー

エクセル2000で65536行を超えるCSVファイルの読み込み方法

Windows2000、エクセル2000です。 今回、約10万行を超えるCSVファイルが送られてきました。 エクセルで開くと当然65536行で切れてしまいます。 やむをえず、拡張子を .txt に変え、メモ帳で開いて分割してエクセルの複数のシートに張ろうとしてみました。 拡張子を .txt に変えれば65536行で切れず、全件表示されます。しかし、このデータをコピーしようとCtrlを押したままマウスでスクロールをしたところ、スクロールはできるのですがデータが膨大なため遅々として先にすすんでくれません。 これじゃらちがあかないので、他の部署のAccsessを使える人にデータをわたして数ファイルのCSVファイルに分割していただきました。 今回はこれで事なきをえたのですが、これからまたこんなことがあった場合、わたしはAccsessを使ったことがないので困ってしまいます。(送付側からは分割したければそっちでやれといわれております。) こんな場合、エクセルではどのような対応をすればいいのでしょうか? (エクセル2007を使えという答えは勘弁してください。)

質問者が選んだベストアンサー

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.2

別にexcelで開かなくても、wordで開いちゃえばいいじゃないですか。 word上で、適当な行数で切って「書式なし(*.txt)」で保存すれば 済む話です。ナンなら「メモ帳」でも同じことが出来ますよ。

merlionXX
質問者

お礼

CSVってワードで開けるんですね! 知りませんでした。 ためしたところメモ帖で開いたときに比べ、非常にスムーズにスクロールし、適用なところで切って別ファイル保存ができました。 ありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#3の補足 説明の文章とコードが違います。 # A1から入れていくとは思っていますが、そうでなければ、iCol を変えてください。i =1 になっていますが、それを変えても、最初のシートだけです。 コードを直し、iROW, iCOL で最初の位置を決められるようにしました。しかし、iCOL は、256列のままですから、当面、iCOL = 1のままでお願いします。 本来は、  If j > 256 -iCOL Then j = 256 -iCOL で、右の限界を決めなくてはなりませんでした。

merlionXX
質問者

お礼

お礼が遅くなり申し訳ございませんでした。 No2の方のアドバイスでワードで取り込むことができたデータをいままで処理しておりました。 やっと終わりました。 Wendy02さまのいつもながら鮮やかな魔術を見せていただいてありがとうございます。 ためしたところ完璧に取り込めました。今後はこれで大きなCSVが送付されても慌てずに対処できそうです。 コードじっくり勉強させていただきます。 ありがとうございました。

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

参考URLに、A No.3の様に、テキストファイルとして処理する方法と、ADOで接続する方法が紹介されています。 データにユニークなIDの様なものがあれば、SQLでIDの範囲を指定して、複数回に分けて読み込めば良いでしょう。適当なものが無ければ、全てRecordsetに読み込んで、Recordsetに対して処理して分割する事になりますが、これはメモリーを食って得策ではないかもしれません。

参考URL:
http://blog.livedoor.jp/akf0/archives/51387288.html
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 今回も、また、「フリーソフトウェアはなし」という条件付きになりそうですね。 私の記憶では、CSV を処理するための、フリーソフトウェアのものすごく優秀なデータベースがあったと思います。 ただ、この質問は、ここの掲示板でなかったのでしょうか。これは、昔から有名な質問ですから、マクロのコードはあるような気がしましたが、今回、私は、改めて自分で作ってみました。内容的はローテクですが、もう少し、気の利いた方法がないのかなっていうのが、今の私の気持ちです。 試したのは、12万行の郵便番号ファイル(csv)を使いました。(ただし、現行のマクロは、256列までのファイルに限ります、257例以上は、切り落としてしまいます。)上限数を越えるたびに、現在のシートの位置を調べ、右側が足りなければ、シートを増やしてから、インポートしていきます。 ただ、もう少し、インポートが速くならないのか、という気がしています。 そのためには、以下のコードを、このようにしてみたら、とは思ったのですが、当面は、そのままにしました。 Application.ScreenUpdating = False Cells(i, 1).Resize(, j).Value = myAr Application.ScreenUpdating = True (Cells の前のオブジェクトのActiveSheet が入っていないのは、微妙な手抜きなのですが、ActiveSheet にしかインポートしませんから、このままにします) なお、CSV には、クォーテーションマーク("")がある時がありますから、それを抜くためには、Substitute 関数が良いと思います。これを入れても、配列で貼り付けている限りは、自動キャスティングで、文字が数値化はしません。 A1から入れていくとは思っていますが、そうでなければ、iCol を変えてください。i =1 になっていますが、それを変えても、最初のシートだけです。 '--------------------------------------- Sub CSVImport() '最大行65536行を越えるCSV のインポート Dim FileName As String Dim FNo As Integer Dim i As Long Dim buf As String Dim myAr As Variant Dim k As Integer Dim j As Integer Const sSEP As String = "," '区切り文字 Const iROW As Integer = 1 '1行目 Const iCOL As Integer = 1 '1列目から入れる Const iMAX As Long = 40000 '上限数 i = iROW '行の初期値     FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv")   If FileName = "False" Then    Exit Sub   End If      FNo = FreeFile()   Open FileName For Input As #FNo   Do Until EOF(FNo)     Line Input #FNo, buf     ''クォーテーションマーク("")を除く場合は、以下のコメントブロックを外す     'buf = WorksheetFunction.Substitute(buf, """", "")     myAr = Split(buf, sSEP)     j = UBound(myAr) + 1     If j > 256 Then j = 256 '列が、256を越えたら、256までのインポート     'Application.ScreenUpdating = False     Cells(i, iCOL).Resize(, j).Value = myAr     'Application.ScreenUpdating = True     i = i + 1     If i > iMAX Then     k = ActiveSheet.Index     Call CheckSheet(k)     i = iROW     End If   Loop     Close #FNo    End Sub Sub CheckSheet(k As Variant) Dim n As Integer  n = ActiveWorkbook.Sheets.Count  If k = n Then    ActiveWorkbook.Worksheets.Add After:=activeSheet  End If End Sub

  • ann_dv
  • ベストアンサー率43% (528/1223)
回答No.1

csvファイルを分割する目的でわざわざAccessを使う必要性はありません。 参考URLは、CSVファイル分割ソフトのほんの一例です。

参考URL:
http://hioki.jp/soft/csvc100/csvc100_j.html
merlionXX
質問者

お礼

さっそくありがとうございます。 とても便利そうなソフトですね。 ただ、残念ながらわたしの会社では会社の指定外のソフトウエアの導入が禁止されているのでつかえないのです。 こんど自宅で試して見ます。 ありがとうございました。

関連するQ&A

  • csvファイルにある20万行のデータをエクセルで

    メモ帳でcsvファイルとしてある20万行近いデータをエクセルに落としたいと考えています。 エクセルの1シートは65000行ほどのデータしか反映できませんが、同じエクセルファイルにシートをいくつか分けて順番にデータを反映することはできますでしょうか?(例:1シート目・1~65000行 2シート目:65001行~130000のような形式で) よろしくお願い致します。

  • とても大きなCSVファイルをEXCELで見たい。

    今、手元にとても大きなサイズのCSVファイルがあります。 そのファイルは、行は1800行なのですが、列は256行以上あり何列あるかわかりません。 EXECL2000で開くと全ては開けなかったと表示されてしまいます。 なんとか、EXCELでこのファイルを見ることはできないでしょうか? または、CSVファイルの列を分割できるようなソフトを ご存知ないでしょうか? よろしくお願いします。

  • CSVファイルを複数のファイルに分割する方法

    CSVファイルの最初の数行を飛ばして、同じ行数ずつ分割して1.csv、2.csv・・・という風に分けたいのですが、行数が膨大で手作業でするにも時間がどのくらいかかるのか分かりません。どなたか簡単な方法を教えてください。

  • VBA csvを100万行ずつ各シートに読み込み

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 64bit SP1、 エクセル2010 でございます。  「1000万行×3列」のCSVファイルデータを、100万行ずつ シート1~10に振り分けたく悩んでおります。 ・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 ・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、 何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。  何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • CSVファイルの行が突然消える

    あるデータを抽出し、それをCSVファイルで取り込み、1つ取り込む ごとにCSVファイルが1行ずつ増えていきます。 適当な時期に、何行かたまった行を一気にAccessを用いてさらに取り込み ます。(取り込むのみ) あるとき、CSVファイルを開くと突然CSVファイルの行が減って いるのです。 何が起きているのでしょうか? Accessに何かマクロとか組んであって突然消えるのでしょうか? Accessを開く前と開いた後(取り込んだ後)で、特にCSVファイル に変更はありません。 あるとき突然CSVファイルを開くと昨日まであった行が突然 消えてしまうのです。(いつ起こるのか予測できていません。) CSVファイルにはマクロが組んであるようには見えません。 何かわかればお願いします。

  • ExcelでのCSVファイルの編集について、

    ExcelでのCSVファイルの編集について、 オートフィルタ機能を使いたいため、 ExcelでCSVファイルの編集しようとしているのですが、ちょっと苦戦しています。。。 私が試してみたこと 1.もとのCSVファイルの拡張子を○○.csv → ○○.txtに変更。   ↓ 2.Excelの「開く」からその○○.txtを読み込む。   ↓ 3.テキストファイルウィザードに従い、   1「カンマやタブなどの区切り文字によって~ 」にチェック   2「区切り文字」→ カンマ、「文字列の引用符」 → "   3「列のデータ形式」 → 文字列 ※090などの数字を、90と先頭の0を消されないように 上記のような手順でCSVファイルを取り込み、編集を終え、 保存する時は   「○○.txtにはテキスト(タブ区切り)と互換性のない機能が含まれている可能性があります。    この形式でブックを保存しますか?」 → このまま保存するため「はい」を選択 これでバッチリOK!…かと思われたのですが、 元の編集前の○○.txt は"名前","ヨミ","電話番号1", …… ""とカンマ区切りであったのが、 編集後の○○.txtは名前 ヨミ 電話番号1  …… タブ区切り(?) となってしまっています。 (CSVファイルとしてはタブ区切りでも問題ないのでしょうが…) どうすれば元のカンマ区切りの形式のまま保存できますでしょうか。 アドバイスよろしくお願い致します。

  • EXCELでCSVファイルの読込み

    VBA超初心者でとても困っています。 仕事でEXCELのVBAを使って 現在開いているシートの中に 1つのCSVファイルからデータを読み込むのですが CSVデータの2行目をEXCELのC2へ。 4~10行目までを、EXCELのB5~B14へ マクロを使い、ボタン一つで自動入力させたいのです・・・。 Line Input も、やり方が悪いのかうまくいきません。 ヒントとなるやり方があればぜひ教えてください。

  • ExcelファイルをCSV 形式で保存するには?

    ExcelファイルをCSV 形式 (Windows、カンマ区切り) (*.csv)にして書類を提出するように言われたのですが、その方法について教えてください。 データの内容は会社の詳細で、1社につき100項目のデータがあり、それが50社あります。その場合、1社目のデータをA列に、2社目のデータをB列にというように入力すればよいのでしょうか? Excel の [名前を付けて保存] ([ファイル] メニュー) を使って、CSV (カンマ区切り) (*.csv)ファイルで保存すると、各項目がカンマで区切られるのでしょうか? 1レコード目と2レコード目はどういった区切りになるのでしょうか? またファイル形式はCSV 形式でと言うことですが、提出するファイル名の拡張子を.txtとしないといけないのですが、それはどうすればいいのでしょうか?

  • CSVファイルをExcelで読み込むと

    CSVファイル中の項目 "01-03"などが、Excelでは 勝手に 1月3日などに変換されてしまいます。 もちろん、拡張子を.txtに書き換えて、毎回フィールドを 文字列属性にして読み込んでやればいいのでしょうが、 なにぶん量が多いので、毎回毎回こんな操作をするのは めんどくさいのです。 CSVファイルのままで、項目を勝手に変換させないで読み込む方法はありませんか??

  • CSVをExcelに読み込む時の前ゼロについて

    CSVファイルをExccelで読み込む方法について教えてください。 前ゼロを消さずにCSVファイルをExcelで読み込む場合に、下記の方法でできると書かれていました。 疑問なのは、なぜ1番でCSVの拡張子をtxtに変えているかです。 CSVをTXTに変える意味はあるんでしょうか? http://q.hatena.ne.jp/1102427939#a4 1.読み込むCSVファイルの拡張子を「.txt」に変更する 2.エクセルから「開く」で読み込むリストを選択して開く 3.「テキストファイルウィザード」というのが現れるので、「元のデータの形式」を「カンマやタブなどの・・・」を選択して「次へ」ボタン押下 4.「区切り文字」は「カンマ」のみをチェックして「次へ」ボタン押下 5.「区切った後のデータ形式を選択してください」とでるので、数字のみの項目を反転させて「文字列」を選択して「完了」ボタン押下 これでいけるはずです。 質問者:nyanta 2004-12-08 07

専門家に質問してみよう