柔軟に働き方を選ぶ時代に必要なこと >>

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

こんな場合、エクセルではどのような対応をすればいいのでしょうか?
(エクセル2007を使えという答えは勘弁してください。)

このQ&Aに関連する最新のQ&A

A 回答 (5件)

別にexcelで開かなくても、wordで開いちゃえばいいじゃないですか。



word上で、適当な行数で切って「書式なし(*.txt)」で保存すれば
済む話です。ナンなら「メモ帳」でも同じことが出来ますよ。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2008/08/13 15:02

#3の補足


説明の文章とコードが違います。

# A1から入れていくとは思っていますが、そうでなければ、iCol を変えてください。i =1 になっていますが、それを変えても、最初のシートだけです。

コードを直し、iROW, iCOL で最初の位置を決められるようにしました。しかし、iCOL は、256列のままですから、当面、iCOL = 1のままでお願いします。
本来は、

 If j > 256 -iCOL Then j = 256 -iCOL
で、右の限界を決めなくてはなりませんでした。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございませんでした。
No2の方のアドバイスでワードで取り込むことができたデータをいままで処理しておりました。
やっと終わりました。

Wendy02さまのいつもながら鮮やかな魔術を見せていただいてありがとうございます。
ためしたところ完璧に取り込めました。今後はこれで大きなCSVが送付されても慌てずに対処できそうです。
コードじっくり勉強させていただきます。
ありがとうございました。

お礼日時:2008/08/14 16:27

参考URLに、A No.3の様に、テキストファイルとして処理する方法と、ADOで接続する方法が紹介されています。


データにユニークなIDの様なものがあれば、SQLでIDの範囲を指定して、複数回に分けて読み込めば良いでしょう。適当なものが無ければ、全てRecordsetに読み込んで、Recordsetに対して処理して分割する事になりますが、これはメモリーを食って得策ではないかもしれません。

参考URL:http://blog.livedoor.jp/akf0/archives/51387288.h …
    • good
    • 0

こんにちは。



今回も、また、「フリーソフトウェアはなし」という条件付きになりそうですね。

私の記憶では、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
    • good
    • 1

csvファイルを分割する目的でわざわざAccessを使う必要性はありません。


参考URLは、CSVファイル分割ソフトのほんの一例です。

参考URL:http://hioki.jp/soft/csvc100/csvc100_j.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/13 15:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルVBAで65536レコードを超えるCSVファイルの読み込み

エクセル2000です。
現在CSV形式のファイルをもらい、エクセルVBAで1行づつエクセルに取り込み、加工しています。(CODEは、かなり省略していますが下記の通り)
データは将来的には何万件におよぶことも考えられます。
ためしに65536を超えるデータを読み込ませたところ65536を超えたところでやはりエラーになりました。Workbooks.Openでエクセル形式で開いているので65536を超える部分は無視されるからだと思います。
このような場合には、どうやってCSVファイルからデータを読み込めばよいのでしょうか?(なお、エクセルは当分2007にはなりそうもありません。アクセスはまったく使えません。)

Sub TEST01()
Set cf = Workbooks.Open(Filename:=ThisWorkbook.Path & "\test.csv")
Set zerro = cf.Sheets(1).Range("A1:AX1")
ThisWorkbook.Sheets("Sheet1").Activate
Do Until zerro.Cells(1).Value = ""
ThisWorkbook.Sheets("Sheet1").Range("A1:AX1").Value = zerro.Value
'処理マクロ省略
Set zerro = zerro.Offset(1)
Loop
End Sub

エクセル2000です。
現在CSV形式のファイルをもらい、エクセルVBAで1行づつエクセルに取り込み、加工しています。(CODEは、かなり省略していますが下記の通り)
データは将来的には何万件におよぶことも考えられます。
ためしに65536を超えるデータを読み込ませたところ65536を超えたところでやはりエラーになりました。Workbooks.Openでエクセル形式で開いているので65536を超える部分は無視されるからだと思います。
このような場合には、どうやってCSVファイルからデータを読み込めばよいのでしょうか...続きを読む

Aベストアンサー

一括で読み込もうとするからダメなのであって、1行ずつ読み込むようにすれば何行にでも対応できると思います。

こんなページを見つけました:
http://www.k1simplify.com/vba/tipsleaf/leaf291.html

上記ページのプログラムは全行読み込んでいますが、ループのところをちょっと加工すれば(行数をカウントして65536を超えたら新しいシートを作ってそっちに書き込むなど)、長大なレコード数に対応できると思います。

ただ、処理の内容にもよりますがExcelでは65536行を超えるデータを1枚のワークシートに保持できませんから、たとえばピボットテーブルなどを作りたい場合はどうしようもありません。
合計を集計するだけとかなら問題ないですけど。

やはり最終的にはAccessを導入すべきかと思います。

QExcelでファイル全体が読み込めないときどうすればいいでしょうか?

計測データーをcsv形式で保存し、エクセルに保存しなおし加工しているのですが、データー量が多く、全てのデーターがエクセル上では表示されないとエラーが出るのです。

どうしても必要なデーターで再計測が出来ないので困っています。
こういった場合どうすればいいでしょうか?
説明が不足していて分かりにくいと思いますが、エクセルでグラフ表示などをしたいので、どうしてもエクセルで表示したいのです。

BOOKはいくつに分かれてもかまいません。
確実にデーターを表示させる方法があれば教えてください
よろしくお願いします

Aベストアンサー

(1)エクセル2007を購入する。100万行ぐらい読み込める
設計らしい。ただメモリの方が心配だが。
(2)CSVファイルを加工する。
例えばレコード数6万以下の複数のファイルに分割する。
VBででも10行ぐらいのものでしょう。学生さんなら、、WEBを調べ、勉強すればすぐ判ります。研究室にはエクセル以外のグラフソフトは無いのですかね。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t29.htm
ほか
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/CSVFile/
アクセスに読み込んで、アクセスの機能でレコード数6万に分割し、エクセルへエクスポートできるかもしれない。
(3)データを間引くー6万5千ぐらいにする。
そもそも6万を越えるデータをエクセルでグラフ化するなど、使い方として、考えられない。数十ぐらいを越えると何か、グラフを見るうえで不都合を感じるものでないかな。グラフなど大まかな趨勢をしる物と思うが。

(1)エクセル2007を購入する。100万行ぐらい読み込める
設計らしい。ただメモリの方が心配だが。
(2)CSVファイルを加工する。
例えばレコード数6万以下の複数のファイルに分割する。
VBででも10行ぐらいのものでしょう。学生さんなら、、WEBを調べ、勉強すればすぐ判ります。研究室にはエクセル以外のグラフソフトは無いのですかね。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t29.htm
ほか
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/CSVFile/
アクセスに読...続きを読む

Qファイルサイズの大きいCSVデータを分割出来るソフト

こんにちは。
仕事上で問題に詰まり、ご質問です。。

一つのCSVファイル(Excelで開いてます。)があり、
このファイルのサイズが、「 40MB 」あります。

このファイルを、それぞれ2MB以内の複数のファイルに
分割しなければいけません。

手作業ですと、上手く2MB以内でファイルを分割することも困難です。


このような場合、何かExcel上で簡単に分割できる方法などは
ありますでしょうか。
もしくは、そのような分割の出来るフリーソフトなどは
あるのでしょうか。

よろしくご回答お願い致します。

Aベストアンサー

csvはアスキー形式ですから、
圧縮ソフトを(LHA・ZIP)などを使うと
驚くほど小さくなります。
そのあとでファイル分割結合ソフトを使えば
よいと思います。

圧縮
http://www.vector.co.jp/soft/win95/util/se033502.html

分割
http://www.forest.impress.co.jp/lib/sys/file/fileseprat/jydivide.html

QExcel 2007で6万5536行以上のデータ

Excel 2007では、最大列数が従来の256列から1万6384列に,最大行数が従来の6万5536行から104万8576行に増えたと聞きました。私のExcelは、2007ですが、最大行数は6万5536行のままです。
どうしたら、6万5536行以上のデータを扱えるようになるのでしょうか?
何らかの設定変更で可能になるのでしょうか?

Aベストアンサー

>何らかの設定変更で

エクセルを素で起動させたときの設定方法は,画面左上の丸いOfficeボタンからExcelのオプションの「保存」欄で,ファイルの保存形式が「Excel 97-2003ブック」になっているので「Excelブック(*.xlsx)」に変更します。



すでにあるブックについては,
>どうしたら、6万5536行以上のデータを扱えるようになるのでしょうか?

画面左上の丸いOfficeボタンから「変換」を開始すると,ブックを一度保存する画面が開いて後に変わっています。

ちなみにxlsxブック形式だけでなく,xlsmやxlsbを選んでも変わります。

QエクセルVBA 大容量CSVファイルの読み込み

200万行のCSVファイルをエクセルに読み込みたいです。Rows.Countを超えるので、2回に分けて
半分読み込み
処理
残り半分読み込み
処理
のようにしたいのです。どうすればいいでしょうか?

参考までに、検索したところ下記のQ&Aは見つかりました。
https://oshiete.goo.ne.jp/qa/3407338.html
ただ、これは途中の任意の1行を読み込む方法です。

100万行のファイルを2個作る等のようなとんちの利いた回答はナシでお願いします。
他に無ければしますが。。。

Aベストアンサー

使えそうな項目が無いですね・・・。
ExcelでCSVファイルを読み込むときに頭を悩ませるデータ型の変更、
(電話番号の前ゼロ消失、
郵便番号が日付になったり計算されてしまう・・・が無さそうなのでマシかも)

CSVファイルのフルパスが
D:\SampleData\てすと.csv
で、
タイトル行が無い場合のコードです。パスとファイル名は適宜書き換えてください。
20行程度の小さなテストデータで問題なかったら本番でお試しを。
数分かかるかと思います。

Sub Test()
Dim Cn As Object
Dim Rs As Object
Dim i As Long, k As Long, j As Integer

Set Cn = CreateObject("ADODB.Connection")

With Cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = _
"Data Source=D:\SampleData;" _
& "Extended Properties='text;HDR=NO;" _
& "FMT=Delimited'"
.Open
End With

Set Rs = CreateObject("ADODB.Recordset")
Rs.CursorLocation = 3 'adUseClient
Rs.Open "SELECT * FROM てすと.csv", Cn, 0, 1, 1

MsgBox "項目数は" & Rs.Fields.Count _
& vbNewLine _
& "行数は" & Rs.RecordCount

Application.ScreenUpdating = False
Sheets(1).Range("A1").CopyFromRecordset Rs, 10 '←本番では1000000に

'残りはシート2に
Rs.absolutePosition = 11 '←本番では1000001に
Do Until Rs.EOF
k = k + 1
If k > 1048576 Then
MsgBox "最大行数を超えました。もう無理!"
Exit Do
End If
For j = 1 To Rs.Fields.Count
Sheets(2).Cells(k, j) = Rs.Fields(j - 1)
Next
Rs.movenext
Loop
Application.ScreenUpdating = True
Rs.Close: Set Rs = Nothing
Set Cn = Nothing
End Sub

使えそうな項目が無いですね・・・。
ExcelでCSVファイルを読み込むときに頭を悩ませるデータ型の変更、
(電話番号の前ゼロ消失、
郵便番号が日付になったり計算されてしまう・・・が無さそうなのでマシかも)

CSVファイルのフルパスが
D:\SampleData\てすと.csv
で、
タイトル行が無い場合のコードです。パスとファイル名は適宜書き換えてください。
20行程度の小さなテストデータで問題なかったら本番でお試しを。
数分かかるかと思います。

Sub Test()
Dim Cn As Object
Dim Rs As Object
Dim...続きを読む

Q大きいサイズのテキストファイルの開き方

いつもお世話になっています。
愚問ですが、ご存知の方、ご回答をお願いします。

あるシステムを運用している中で、今迄誰も気が付かず
膨れ上がってしまったログファイル(テキスト)が4GB程あります。

これらを参照したいと思うのですが、当然のごとく
メモリオーバーが発生し開く事ができません。
このような大きいファイルを参照する術はありますでしょうか?
(あくまでも過去分を見たいので、このファイルを開きたいです)

##環境##
OS  Windows2000
CPU Celeron1.7GHz
メモリ 254MB

足りない情報があればご指摘下さい。
どうぞ、よろしくお願いします。

Aベストアンサー

そういう用途に特化したオンラインソフトを利用するとか。

GigaReader
http://www.vector.co.jp/soft/win95/util/se358341.html
鈴川エディタ
http://www.vector.co.jp/soft/winnt/writing/se367901.html

参考URL:http://www.vector.co.jp/soft/win95/util/se358341.html, http://www.vector.co.jp/soft/winnt/writing/se367901.html

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

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。
環境:Win7 64bit SP1、 エクセル2010
でございます。

 「1000万行×3列」のCSVファイルデータを、100万行ずつ
シート1~10に振り分けたく悩んでおります。
・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、
・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、
何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。

 何か良さそうな方法を思いつかれる方はおられませんでしょうか。
もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

Aベストアンサー

>そのようにいたしますと、「,」(=カンマ)で区切られたCSVファイルの1行のデータ全てが
エクセルの「A1」に入ってしまいます。

実際に私の提示した方法を試されたのでしょうか?

私が提示した方法は、エクセルの一般機能(区切り位置)で上記のようなデータを列に自動的に分割する方法を紹介しています。

このように1回だけ区切り位置の機能を利用すると、その設定をエクセルが記憶していて、2回目からコピー貼り付けするだけで、自動的に列に分割してくれます。

自分でマクロコードを編集や記載する手間や時間を考慮すれば(毎日何回も同じ作業を繰り返すようなことがないなら)、私の提示した方法でショートカット操作を使えって操作すれば、10回のコピー貼り付け操作は5分もあればできると思うので、実戦的には効率的だと思うのですが・・・

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QCSVの最終行は?

エクセル2003の最終行、限界行は65536行ですが
エクセル2003のCSVファイルの限界の行も65536行なのでしょうか?

Aベストアンサー

CSVファイルそのものには、限度はありません。
が、もちろんそのCSVを漫然とWクリックしてエクセルに開かせている限りは、エクセルのワークシートの最大行までしか「エクセルで表示する事」は出来ません。

○ネットで入手できるCSVエディタを使う
○エクセルでデータの取り込みを使い、取り込み開始行を指定して取り込む
○単純にテキストエディタ(メモ帳、その類似品、あるいはワードでも可)で開く
●Excel2007以降を使う(最大1,048,576行)

QエクセルVBA 2千万行のCSVファイルを開きたい

上から順に読み込み、順次処理していき最終的には全部処理します。CSVファイルは読むだけです。

やり方はいくつか考えられます。
1
100万行ずつシートに読み込み、終わったら次を読み込む。CSVファイルは開きっぱなし。

2
100万行ずつのエクセルファイルに分割し、順次開いて処理。ファイル開閉に時間がかかる

3
2千万行の巨大な配列に代入し、順次処理。
CSVファイルは閉じることが出来る。

3がいいように思えますが、どうでしょうか?使用メモリは1と同じですか?

Aベストアンサー

> 懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。

それに関しては問題ないです。VBAのOpenでファイルを開いた場合、実は一切読んでいません。今何行目を読んでいるかを示すカウンタを用意するだけです。またLine Inputで読み込む場合も、今操作している一行しか相手にしません。

だからこそ、実装している物理メモリ量をはるかに超えるサイズのファイルを扱っていても、仮想メモリのお世話にならずに済むわけです。

なので懸念材料はそこではなく、分割処理することによってデータ同士の断絶が起きると言うか、連続性がなくなることでしょうか。最初の100万行の固まりと、次の100万個の固まりには全くつながりがないことになるので。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報