プロが教える店舗&オフィスのセキュリティ対策術

実際70万レコードほどはあるcsvファイルを開いたらもちろん65536行で切れました。
このファイルからある列で数字の1が入っているレコードを検索したいんですが、何か方法ありますでしょうか?
どなたかご存知の方お教えください。

A 回答 (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
    • good
    • 0

No.5です。



Vectorに登録されているDIV というツールを私は使っています。

参考URL:http://www.vector.co.jp/soft/win95/util/se088352 …
    • good
    • 0

#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万レコード読むから、時間はかかるでしょう。少数例でテスト済み。
    • good
    • 0

フリーフェアなどで5万件単位に分割して


それをExcelに読ませるという方法もあります。

メモリーは積めるだけ積んどいたほうがいいかもね。

この回答への補足

そのソフトって教えてもらえますか?

補足日時:2006/02/17 18:55
    • good
    • 0

>数字の1が入っているレコード


該当見込みは1割(65000件)以上ですか。不明ですか。
>ある列で・・
左から何番目の列ですか。決まった列1列でしょうね。
○今回の!作業ではとりあえず、条件(=1)に該当しないレコードは、全く使わないのでしょうね。

この回答への補足

>該当見込みは1割(65000件)以上ですか。
70万あって恐らくそのレコードは100もないです。

ある列は下にも書いたように決まっております。

補足日時:2006/02/17 18:53
    • good
    • 0

こんばんは。



>65536行を超えるcsvファイルから検索したい
Excelでということですね。

Excelで、CSV を直接開いてはダメです。簡単なマクロで出来ます。

>ある列で数字の1が入っているレコード

どこの列なのか決まっていますか?そのほうが検索が速いですね。全部の列を調べるというのは、面倒です。

それと、クォーテーションで囲んでいますか?いませんか?それによっても違います。
    • good
    • 0
この回答へのお礼

過去の質問でもマクロならいけるみたいですね。。マクロさっぱりですが。。
>ある列で数字の1が入っているレコード
列は左から4列目で固定です。

>クォーテーションで囲んでいますか?
txtで開けばカンマ区切りです。シングルクォーテーション付けて文字列にしてあるか?とかいう意味でしょうか?excelで開いてもただの数値です。

こんな感じですがなにか補足でもございましたらご指摘お願い致します。

お礼日時:2006/02/17 18:53

秀丸エディタでcsvファイルを開いて、[検索]-[grepの実行]。


[grepの実行]ウィンドウで、以下の通り設定して、[OK]。
検索する文字列 : ^(.*?,){n}1,
検索するファイル : (現在の内容)
正規表現 : ON
(*) 検索する文字列の「n」は、列番号-1を指定します。
  3列目であれば「2」、5列目であれば「4」となります。

参考URL:http://hide.maruo.co.jp/software/hidemaru.html
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お金がかかるのはちょっと・・見送らせてもらいます。ごめんなさい!

お礼日時:2006/02/17 18:50

もしかしてエクセルでの話ですか?


パフォーマンスの設定ができるテキストエディッタを使用すれば、検索はできますよ
ちなみに私のお勧めは秀丸エディッタ
動作環境の設定で1000万行まで表示可能です
また、通常のテキストエディッタなら、表示しなくてもGrepの機能があるので、サイズが大きい場合はこの機能を使うと良いですよ
シェアウェアなので、気に入った場合は正規購入をお勧めします
※そのままでも使用可能です

参考URL:http://www.vector.co.jp/soft/win95/writing/se086 …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
急いでいるのでさらっとだけみさせてもらいました。
まずcsvでは開けないので、txtでひらくとカンマ区切りな訳で、このなかからある一列の1を検索できないかな。と思いまして。
ある一列は決まった列ですので多少は簡単かな、と。
皆様にまとめてのお礼になって申し訳ないですが、
これをご覧になって補足などございましたら、書き込んでいただければ嬉しいです。

お礼日時:2006/02/16 09:11

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