こんばんは。

VBでcsv形式のファイルの一部を取り出したいのですが、
例えば、下の3 行、3 列のデータが CSV 形式で保存されているファイルで

First Name,Last Name,HireDate
Nancy,Davolio,10-22-91
Robert,King,10-23-91

その中の"Nancy"だけを取り出して、テキストボックスに入れたいのですが
一部だけ取り出すことってできるのでしょうか?
教えて下さい。
よろしくお願いします。

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

A 回答 (3件)

>CSVファイルを開いて1行目、2行目など行を指定して、内容を取り出すことも


>可能なのでしょうか?

こうしたらどうでしょう。

CSV形式ファイルを"file.csv"とします。

Dim aaa As String
Dim cnt As Long

Open "file.csv" For Input As #1

cnt = 0
Do While Not EOF(1)
Line Input #1, aaa
cnt = cnt + 1 '<-----何行目かを数える

Select Case cnt
'1行目の場合、テキストボックス1に設定
Case 1
Text1.Text = Left$(aaa, InStr(aaa, ",") - 1)
'2行目の場合、テキストボックス2に設定
Case 2
Text2.Text = Left$(aaa, InStr(aaa, ",") - 1)
'3行目の場合、テキストボックス3に設定
Case 3
Text3.Text = Left$(aaa, InStr(aaa, ",") - 1)
End Select
Loop

Close (1)
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。

詳しいご説明本当にありがとうございました。
すごくわかりやすくて、とても参考になりました。

教えていただいたのをもとに、プログラムを完成することができました。

お礼日時:2001/04/09 23:30

1行取出した後の文字の分割ですが、VB6なら


splitを使うと楽です。

dim strBuf() as string
dim
........
........


'strTextは、取出した1行
'カンマで分割
strBuf=split(strText,",")

'strBuf(0)などで使用できます。
どうでしょうこんなんで?
    • good
    • 1
この回答へのお礼

ご返事ありがとうございます。

splitがあるなんて知りませんでした。

早速参考にさせていただきます。

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

お礼日時:2001/04/09 23:23

Dim aaa As String


aaa = "Nancy,Davolio,10-22-91"
Text1.Text = Left$(aaa, InStr(aaa, ",") - 1)

これでテキストボックスに"Nancy"という文字が入ります。
あとはこれを応用すればできます。

この回答への補足

ご返事ありがとうございます。

Left$()関数を使う方法があったんですね。
そうしたら、
CSVファイルを開いて1行目、2行目など行を指定して、内容を取り出すことも
可能なのでしょうか?

補足日時:2001/04/09 00:02
    • good
    • 0

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

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

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

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

Qテキストファイルの一部分を抽出する方法について

ログファイルのようなテキストファイルの中から一部分だけ抽出することは可能でしょうか。
たとえばタイトルやSQL文、それに結果がダラダラと並んでいる一連のログファイル(テキストファイル)の中から、使いたい結果の部分だけ使用したいと考えております。

具体的には次のような感じです(テキストファイル部分は一字下げています):

 --------------------
 18,購入年月
 SQL>******(省略します)*******
 SQL>******(省略します)*******
 SQL>******(省略します)*******

 顧客番号  購入年月   購入個数
 ----------------------------------
 0000012   2010/01   4
 0000530   2009/12   16
 0001234  2009/11  398

 3行取得しました。

 ----------------------
 19,顧客層
 SQL>******(省略します)*******
 SQL>******(省略します)*******
 SQL>******(省略します)*******
 ・・・

以上のテキストファイルの中から、
(1)「顧客番号  購入年月   購入個数」
から
(2)「3行取得しました。」
までを抽出したいです。
検索して範囲指定して切り取り…というのが原始的な方法ですが
対象ファイルが数個あるので、Excelで開き、VBA等で対応できればと思っています。
ちなみに(1)の項目名の間は複数スペースで区切られており、顧客~個数まで固定で、同一ファイル内に同じ文字列はないので、検索の条件に使えると考えています。(2)は抽出件数によって「*行」の箇所が変わるうえ、同一ファイル内の他の部分にも登場する文字列です。

(1)から次に初めて出てくる(2)までを抽出

といったことができればと思うのですが、なかなか良い方法が浮かびません。
何か良い方法がありましたらご教示いただければ幸いです。

ログファイルのようなテキストファイルの中から一部分だけ抽出することは可能でしょうか。
たとえばタイトルやSQL文、それに結果がダラダラと並んでいる一連のログファイル(テキストファイル)の中から、使いたい結果の部分だけ使用したいと考えております。

具体的には次のような感じです(テキストファイル部分は一字下げています):

 --------------------
 18,購入年月
 SQL>******(省略します)*******
 SQL>******(省略します)*******
 SQL>******(省略します)******...続きを読む

Aベストアンサー

古いVBAで、とりあえずご提示された条件を満たすだけの最低限の内容ですが。

Sub Data_Extract()

Dim TextLine As String
Dim Cell_Row As Long
Dim Atama_Four As String
Dim SW As Integer

Cell_Row = 0
SW = 0

Open "c:\Data.txt" For Input As #1

Do While Not EOF(1)
Line Input #1, TextLine

' 行中に"顧客番号"という文字を発見した場合にスイッチを入れる
If InStr(1, TextLine, "顧客番号") <> 0 Then
SW = 1
End If

' SWが1で、かつ行中に"行取得しました。"という文字を発見した場合にスイッチを切る
If InStr(1, TextLine, "行取得しました。") <> 0 And SW = 1 Then
Cell_Row = Cell_Row + 1
Cells(Cell_Row, 1) = TextLine
SW = 0
End If

'スイッチが入っていればその行を書き出す
If SW = 1 Then
Cell_Row = Cell_Row + 1
Cells(Cell_Row, 1) = TextLine
End If
Loop

Close #1

End Sub

古いVBAで、とりあえずご提示された条件を満たすだけの最低限の内容ですが。

Sub Data_Extract()

Dim TextLine As String
Dim Cell_Row As Long
Dim Atama_Four As String
Dim SW As Integer

Cell_Row = 0
SW = 0

Open "c:\Data.txt" For Input As #1

Do While Not EOF(1)
Line Input #1, TextLine

' 行中に"顧客番号"という文字を発見した場合にスイッチを入れる
If InStr(1, TextLine, "顧客番号") <> 0 Then
SW = 1
End If

...続きを読む

Q【VBA】テキストファイルを指定行数からの読み込み

こんばんは。

EXCEL VBAでテキストファイルを読み込む事について質問です。

VBAでテキストファイルをこちらから指定する行数(上から何番目という感じで)からデーターを読み込みたいのですが、どの関数をつかっていいかわからず困っています。
1行ずつ読みこむ「Input Line関数」では、無駄な行まで読み込むので動作が遅くなります。
読み込みたい行はすでにわかっているので、最初からその行に飛んでからデーター読み込みたいと思ってます。

ちなみに指定する行数は、ファイルによって違います。
あらかじめ「Input Line関数」で、ある文字が何行目にあるかを探す行為をあらかじめ行っています。

みなさまのアイデアを拝借したく、よろしくお願いします。

Aベストアンサー

速度は分かりませんが、これとか
http://officetanaka.net/excel/vba/filesystemobject/textstream10.htm

あるいは、丸ごと読みこんで、改行コードでSplitして、文字列配列を相手に該当行検索も含めて処理するとか。
昨今のPCでは、相当大きなテキストファイルでもメモリー内で処理できると思います。
http://officetanaka.net/excel/vba/filesystemobject/textstream07.htm

テキストファイルの構造によってはADOで処理する案も考えられますが、Recordsetにはファイルの先頭から(あるいは末尾先頭で)入っている事が保証されているのか、ちょっと心配。参考URLはCSVになっていますが、タブ区切りテキストファイル(拡張子.txt)でもいけます。
http://home.att.ne.jp/zeta/gen/excel/c04p47.htm

以上ご参考まで。


人気Q&Aランキング