- ベストアンサー
65536行を超えるcsvファイルから検索したい
実際70万レコードほどはあるcsvファイルを開いたらもちろん65536行で切れました。 このファイルからある列で数字の1が入っているレコードを検索したいんですが、何か方法ありますでしょうか? どなたかご存知の方お教えください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。#3のWendy02です。 以下は、CSV検索プログラムです。なるべく、標準モジュールに登録してお使いください。 今回の検査は、郵便番号辞書(DD_0503.CSV)で試してみました。問題ないようには思われます。すでに、マクロの回答も出ているようですが、これは、Excelで確認しながら出力していくように作られています。スピード優先には出来ていませんが、確認しながらという所がミソです。 'ファイル名 を入れてください。 後は、ご質問どおりになっていますが、一応確認してください。 '検索語 '列 15行出力すると、画面から現れるようになっています。 Sub CSVFindNumberinColumn() Dim i As Long Dim j As Integer, Fnum As Integer Dim myAr As Variant Dim Buf As String 'ファイル名 Const MYFILE As String = "C:\ADD_0503.CSV" '検索語(念のために、" " で囲ってください。) Const FINDSTR As String = "1" '列 Const FINDCOL As Integer = 4 Fnum = FreeFile() i = 1 Open MYFILE For Input As #Fnum Application.ScreenUpdating = False Do Until EOF(Fnum) DoEvents Line Input #Fnum, Buf myAr = Split(Buf, ",") '列目 If WorksheetFunction.Substitute(myAr(FINDCOL - 1), """", "") = FINDSTR Then Cells(i, 1).Resize(, UBound(myAr) - LBound(myAr) + 1).Value = myAr i = i + 1 '15行ごとに画面を見えるようにさせる。 If i Mod 15 = 0 Then Application.ScreenUpdating = True Application.ScreenUpdating = False End If If i > 65535 Then Close #Fnum: MsgBox "65535行を超えましたので停止します。": Exit Sub End If Loop Close #Fnum Application.ScreenUpdating = True End Sub
その他の回答 (7)
- k-roh
- ベストアンサー率36% (14/38)
No.5です。 Vectorに登録されているDIV というツールを私は使っています。
- imogasi
- ベストアンサー率27% (4737/17069)
#4です。 >該当しないレコードは、全く使わないのでしょうね これにも答えてない。回答の死命を制することを判ってないようですね。 下記をエクセルのVBEの画面で標準モジュルーを挿入し、 Sub test01() Open "C:\Documents and Settings\XXXX\My Documents\test02.csv" For Input As #1 Open "C:\Documents and Settings\XXX\My Documents\test03.csv" For Output As #2 While Not EOF(1) Line Input #1, a x = Split(a, ",") If x(3) = 1 Then Print #2, a End If Wend Close #1 Close #2 End Sub をコピーして貼り付け、実行してみてください。 約100件とおっしゃるCSVファイルができますから、それをエクセルに読み込ませ、あとはエクセルでどうでもしてください。 ファイル指定のXXXXの部分は自分の場合に合わせること。 If x(3) = 1 Thenの()内の3が4列目を指定してます。 Wendy02プロの補足要求の >クォーテーションで囲んでいますか? txtで開けばカンマ区切りです。シングルクォーテーション付けて文字列にしてあるか?とかいう意味でしょうか?excelで開いてもただの数値です。 補足がピントはずれです。文字列はダブルコーテーションで囲んでないものとします。 70万レコード読むから、時間はかかるでしょう。少数例でテスト済み。
- k-roh
- ベストアンサー率36% (14/38)
フリーフェアなどで5万件単位に分割して それをExcelに読ませるという方法もあります。 メモリーは積めるだけ積んどいたほうがいいかもね。
- imogasi
- ベストアンサー率27% (4737/17069)
>数字の1が入っているレコード 該当見込みは1割(65000件)以上ですか。不明ですか。 >ある列で・・ 左から何番目の列ですか。決まった列1列でしょうね。 ○今回の!作業ではとりあえず、条件(=1)に該当しないレコードは、全く使わないのでしょうね。
補足
>該当見込みは1割(65000件)以上ですか。 70万あって恐らくそのレコードは100もないです。 ある列は下にも書いたように決まっております。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >65536行を超えるcsvファイルから検索したい Excelでということですね。 Excelで、CSV を直接開いてはダメです。簡単なマクロで出来ます。 >ある列で数字の1が入っているレコード どこの列なのか決まっていますか?そのほうが検索が速いですね。全部の列を調べるというのは、面倒です。 それと、クォーテーションで囲んでいますか?いませんか?それによっても違います。
お礼
過去の質問でもマクロならいけるみたいですね。。マクロさっぱりですが。。 >ある列で数字の1が入っているレコード 列は左から4列目で固定です。 >クォーテーションで囲んでいますか? txtで開けばカンマ区切りです。シングルクォーテーション付けて文字列にしてあるか?とかいう意味でしょうか?excelで開いてもただの数値です。 こんな感じですがなにか補足でもございましたらご指摘お願い致します。
- shikisaito
- ベストアンサー率52% (257/491)
秀丸エディタでcsvファイルを開いて、[検索]-[grepの実行]。 [grepの実行]ウィンドウで、以下の通り設定して、[OK]。 検索する文字列 : ^(.*?,){n}1, 検索するファイル : (現在の内容) 正規表現 : ON (*) 検索する文字列の「n」は、列番号-1を指定します。 3列目であれば「2」、5列目であれば「4」となります。
お礼
ご回答ありがとうございます。 お金がかかるのはちょっと・・見送らせてもらいます。ごめんなさい!
- usami33
- ベストアンサー率36% (808/2210)
もしかしてエクセルでの話ですか? パフォーマンスの設定ができるテキストエディッタを使用すれば、検索はできますよ ちなみに私のお勧めは秀丸エディッタ 動作環境の設定で1000万行まで表示可能です また、通常のテキストエディッタなら、表示しなくてもGrepの機能があるので、サイズが大きい場合はこの機能を使うと良いですよ シェアウェアなので、気に入った場合は正規購入をお勧めします ※そのままでも使用可能です
お礼
ご回答ありがとうございます。 急いでいるのでさらっとだけみさせてもらいました。 まずcsvでは開けないので、txtでひらくとカンマ区切りな訳で、このなかからある一列の1を検索できないかな。と思いまして。 ある一列は決まった列ですので多少は簡単かな、と。 皆様にまとめてのお礼になって申し訳ないですが、 これをご覧になって補足などございましたら、書き込んでいただければ嬉しいです。
補足
そのソフトって教えてもらえますか?