みなさんはじめまして

VB初心者です。
個人+仕事で色んなデータをエクセルに納めています。

そのデータ(CSV)をオラクルのデータベースに収めようと思っています。
その為データをオラクルに取り込むプログラムを作ろうと思っていますが、
その前段階として、CSVファイルを取り込みたいのですが、買った入門者
用の本にはそんな事がかかれていなくて、どのように取り込めばいいのかが
わかりません。大きな本屋で、それらしいものを探していましたが、見当た
らなかったです。(というよりわからなかったと言うのが正解です)

どのようにしてCSVファイルを取り込めばいいのでしょうか?

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

A 回答 (5件)

こんな感じです。



Private Sub Command1_Click()
Const カラム数 As Long = 5
Dim iFno As Integer
Dim sData(カラム数) As String
Dim i As Long
iFno = FreeFile()
Open "e:\test.csv" For Input As iFno
Do Until EOF(iFno)
For i = 1 To カラム数
Input #iFno, sData(i)
Next
Loop
Close iFno
End Sub

ただし、,の数が一定でないと駄目です。
上記の例では、5カラム。つまり「,]が4つですね。
"A,B"のように""囲まれたデータもちゃんとA,Bとして
読み込みますから、Line Inputを使うより、この方が簡単だと思います。

ですが、特に加工が必要でなければ、deagleがおっしゃるようにSQL*Loaderの方が楽だと思いますよ。
    • good
    • 0
この回答へのお礼

どうも細かく書いていただきましてありがとうございます。

これだけ書かれていると、これに手を加えるだけでほぼ出来
てしまいますね!

一応これで作ってみようかと思います。
それでできた時にSQL*Loaderを使ってみたいと思います。
何事も勉強なので・・・

お礼日時:2001/06/07 09:33

もう一つ。


うろ覚えで具体的に書けないのですが、VBに付属の
ISAM用のODBCドライバをド使うとCSV
ファイルをデータベースのように読めたような・・・。

いいかげんな情報でごめんなさい。
    • good
    • 0

 SQL*Loader は駄目なんでしょうか?


 CSVをオラクルに取り込むという、そのものずばりなツールがオラクルには最初から入っています。
 使い方はオラクルのオンラインヘルプで見れたはずですが、これはユーザーならみんな見れたんでしたっけ……。
    • good
    • 0
この回答へのお礼

VBのオンラインヘルプばかり見ていたので、家に帰ってか
ら一度見てみます。

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

お礼日時:2001/06/07 09:30

VB初心者なのか、プログラムの初心者なのか判断出来ませんが、今は、プログラムの初心者と思ってか来ます。


 VBの命令が解らないのなら、ご自分の理解出来るプログラム言語では"こういう命令がある”が、VBではどうやって書くのって聞いて下さい。その方が早いです。

 プログラムの初心者って事で、ここではVBの話よりも、CSVデータの表現の事を書きます。
カンマ区切りデータで、『"』は文字列の表現に使用していると過程します。
簡単なアルゴリズムを書きます。後は、それをプログラムに落とせばOKです。仕事(特にオラクルって事は、個人ではないですよね...多分)でって事も考慮して、ここは無料のサポートセンターではないのですから...。

1.文字列の長さを調べる(Lengthコマンド)
2.長さが”0”なら終了(if又は、While文)
3.ループ(前記で、ifを使用している場合のみ。while文)4.文字列の1番最初が、「"」か判定する(ifとLeft)
5.真:一文字目を、格納用の変数に入れる
6. :次の「",」を探す。(Instr)
7. :結果:有:格納用変数に追加で入れる
8.      :その文字以降の文字を検索文字列とする
9.     無:全部を格納用変数に入れる
10.偽:次の「,」を探す(以下、7~9と殆ど同じ)
11.文字列の長さを得る。
12.まだ文字列がある場合には、3から行う
13.これで、格納用変数に、CSVデータが入る事になる

 ここで注意。これでは、ただカンマ等のデータが抜けた事になるので、格納用変数には、配列を使用する等の手段を用いる必要がある。
    • good
    • 0
この回答へのお礼

説明が悪くてすいません。VB&プログラム初心者です。
データ自体は何十万件も超えるようなものではありませんが、友人から不要
になったオラクルを安く譲っていただけたので、オラクルを覚えるいい機会
だと言う事もあって、プログラムを作ろうと思いました。

とりあえずプログラム作成の良い参考になります。
どうもありがとうございました。

一応誤解のないように言っておきますが、あくまで個人でのプログラム作成です。

お礼日時:2001/06/06 15:51

VBのオンラインヘルプですが、基本的なことは以下のサンプルでわかると思うます。



1.テキストファイルのオープン。(openを使用します。今回はテキスト用に開いて下さい。)
2.1行づつのデータの読みこみ。(Line Inputを使います。)
3.2の処理をファイルが終了するまで行ってください。
4.読みこんだテキストは、カンマ区切りのデータですので、テキストの編集処理を行い、必要なデータを取り出してください。

*********以下 オンラインヘルプ***********

次の例は、Line Input # ステートメントを使って、シーケンシャル ファイルから 1 行ずつ読み込んで変数に代入しています。ファイル TESTFILE は、複数行のデータを含むテキスト ファイルと仮定します。

Dim TextLine
Open "TESTFILE" For Input As #1' ファイルを開きます。
Do While Not EOF(1)' ファイルの終端までループを繰り返します。
Line Input #1, TextLine' 行を変数に読み込みます。
Debug.Print TextLine' デバッグ ウィンドウに表示します。
Loop
Close #1' ファイルを閉じます。
    • good
    • 0
この回答へのお礼

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

大変参考になりました。

お礼日時:2001/06/06 15:44

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

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

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

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

Qcsvファイルを読み込んでデータベースのデータと比較して異なっていた場

csvファイルを読み込んでデータベースのデータと比較して異なっていた場合は更新するようにしたいと考えています。

csvデータ…10
データベースから取得したデータ…10.0
※比較するテーブルのフィールドのデータ型はFLOAT型です。

文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比較、どっちがいいのでしょうか。
またどのように比較すればいいのでしょうか。

くだらない質問かもしれませんが宜しくお願いします。

Aベストアンサー

No1の方が言いたいこと良くわかります。けして、質問の意味取り違えていませんよ。

>文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比

問題になるのは、対象となるデーターの背景です。何のデーターを対象としているかです。

例えば、計測又は計量したデーター10.10 と10.1 では意味が違いますね。10.10では100分の1まで計測したが100分の1は0だったという意味です。10.1は10分の1までの計測で、100分の1の値は不明と言うことです(又は四捨五入などの圧縮したデーター)。

数値的には同じ10.1ですが、何桁で扱うかが問題になります。DBでデーター型で扱う利点は、このような時に精度をそろえられるところにあります。文字列として扱ってしまうと、余計な(0と言う文字を追加)作業が出てくる場合もあります。

逆にそんなのどうでもいい、と言う場合もたくさんあり、ケースbyケースです。

文字列として"10.10" == "10.1"なるのかと言う問題ですね。これを==で結びたいときは数値として扱うべき、そうでない時は文字列として扱うと簡単です。

と言うことで回答はケースbyケースです。

No1の方が言いたいこと良くわかります。けして、質問の意味取り違えていませんよ。

>文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比

問題になるのは、対象となるデーターの背景です。何のデーターを対象としているかです。

例えば、計測又は計量したデーター10.10 と10.1 では意味が違いますね。10.10では100分の1まで計測したが100分の1は0だったという意味です。10.1は10分の1までの計測で、100分の1の値は不明と言うことです(又は四捨五入などの圧...続きを読む

QVBでCSVファイルを取り込み、Accessに格納する方法

VBから、csvファイルを取り込んで、Accessのテーブルに格納したいので
すが、Input# でうまくいきません。
csvファイルは、基本的に,区切りですが
1)値の両端を"でくくる。
2)値として"がある場合は、""に変換する。
という仕様です。(ExcelでCSVファイルを作るときと同じ)
3)先頭13列が、上記のような仕様
  さらに14列目から290列目までは数値データで、値を""でくくらない。
データ例として、
"aaa","""値""",""",,","""値2,,""","bbb",・・・"ccc",0,1,2,・・・,276
=== ====== ==== ========== === === = = = ===
 1 2 3 4 5 13 141516 290
1の値:aaa
2の値:"値","
3の値:",,
4の値:"値2,,"
5の値:bbb
としてテーブルに取り込みたいです。
Access2000では、255列以上は取り込めないため、
14列目以降の値を9個ずつ別レコードに分けています。
つまり、22列のテーブルにレコード化しています。
レコード1:列1~13の値+列14~22の値
レコード2:列1~13の値+列23~31の値
・・・
255列の制限は仕方ないとしても、上記のようなCSVファイルを
VBでAccessテーブルに取り込む良い方法を教えてください。

VBから、csvファイルを取り込んで、Accessのテーブルに格納したいので
すが、Input# でうまくいきません。
csvファイルは、基本的に,区切りですが
1)値の両端を"でくくる。
2)値として"がある場合は、""に変換する。
という仕様です。(ExcelでCSVファイルを作るときと同じ)
3)先頭13列が、上記のような仕様
  さらに14列目から290列目までは数値データで、値を""でくくらない。
データ例として、
"aaa","""値""",""",,","""値2,,""","bbb",・・・"ccc",0,1,2,・・・,276
=== ====== ==...続きを読む

Aベストアンサー

すいません。ちゃんと読んでませんでした。もう一度。

"aaa","""値""",""",,","""値2,,""","bbb"
をSplitでばらすと

配列0の値:"aaa"
配列1の値:"""値"""
配列2の値:"""
配列3の値:
配列4の値:"
配列5の値:"""値2
配列6の値:
配列7の値:"""
配列8の値:"bbb"

となりますので、配列0番目から順にダブルクゥオートの数
をチェックしていくことになると思います。
配列0はaaaでOK
配列1も""値""でOK(後で""を"に変換する必要あり)
配列2は"が一つなのでおかしい。
よって、配列2と3をカンマでつなぐ。(""",)
でもまだおかしいので、配列2と3と4をカンマでつなぐ。(""",,")
配列2,3,4は"",,でOK
・・・
という風に処理していくことになるかと思います。

どうでしょうか?

Qデータにカンマが入ったCSVデータのread方法

VBにてCSVデータを読み込むロジックを組んでいるのですが
データの中にカンマが入ったものがたまにあります。
通常通り読むとデータのカンマを区切りのカンマと間違え正しく変数に読み込まれません。
たとえばCSVデータが下記の場合
123,de-ta,12,000,jjjj
実際のデータは
123
de-ta
12,000
jjjj
ですが
12,000を2個のデータと認識して
123
de-ta
12
0000
jjjj
のようになってしまいます。
どなたか12,000をちゃんと読める方法をご存知の方お力をお貸しください。
よろしくお願い致します。

Aベストアンサー

こんにちは
そのアプリは、固定長出力はできないでしょうか。
二重引用符もだめだとすると、規則性を利用してロジックで分けるしかありません。
例えば・・
Line Input で1行ずつ取り込み。
念のためカンマの数をカウントしてみる。
カンマの位置で、データを切り出す。Instr()かVB6のSplit()で。
IsNumeric(str)を利用して、データが数値か文字列かを判断する。
例ですと、数値の後ろの項目は文字列になっているので、文字列が後ろに来たら、そこまでの数値を連結する。
てな具合です。
では!

Qホームページ上の複数のCSVファイルを、エクセルに自動取り込みする方法

ホームページ上のCSVファイルをダウンロードし、そのデータをエクセルに貼り付けるマクロで、1回のマクロ起動で、複数のダウンロードファイルを同ブック内で別々のシートに貼り付けていくにはどのようにすればよいのでしょうか?

以下のマクロを教えて頂き、個々のデータを取る事は分かったのですが、新たに、複数の銘柄を一回のマクロで処理する方法を考えております。

以下のマクロであれば、IBMの株価をダウンロードして終了となるところを、DELLの株価、AAPLの株価と一回のマクロで同ブック内で別のシートにデータを貼り付けをしていきたいと思っています。


Sub sample1()
Dim url As String
Dim sDate As String
Dim eDate As String
Dim Symbol As String
Dim i As Integer
sDate = "1000/1/1" '開始日
eDate = "2010/12/31" '終了日
Symbol = "IBM" '銘柄
url = "​http://ichart.finance.yahoo.com/table.csv?g=d&ignore=.csv"​
url = url & "&s=" & Symbol
url = url & "&a=" & Month(sDate) - 1 & "&b=" & Day(sDate) & "&c=" & Year(sDate)
url = url & "&d=" & Month(eDate) - 1 & "&e=" & Day(eDate) & "&f=" & Year(eDate)
'データ読み込み
With ActiveSheet
.Cells.Delete
For i = 1 To .QueryTables.Count
.QueryTables(1).Delete
Next
With .QueryTables.Add(Connection:="TEXT;" & url, Destination:=.Range("A1"))
.TextFileCommaDelimiter = True
.Refresh
End With
End With
End Sub

ホームページ上のCSVファイルをダウンロードし、そのデータをエクセルに貼り付けるマクロで、1回のマクロ起動で、複数のダウンロードファイルを同ブック内で別々のシートに貼り付けていくにはどのようにすればよいのでしょうか?

以下のマクロを教えて頂き、個々のデータを取る事は分かったのですが、新たに、複数の銘柄を一回のマクロで処理する方法を考えております。

以下のマクロであれば、IBMの株価をダウンロードして終了となるところを、DELLの株価、AAPLの株価と一回のマクロで同ブック内で別のシー...続きを読む

Aベストアンサー

例えばSheet1のA列に銘柄がある場合(A1=IBM,A2=DELL,A3=AAPL...など)、こんなのでは?
Sub sample1()
Dim ss As Worksheet
Dim ds As Worksheet
Dim url As String
Dim sDate As String
Dim eDate As String
Dim Symbol As String
Dim r As Long
Set ss = Sheets("Sheet1") 'またはActiveSheetなど銘柄があるシート
sDate = "1000/1/1" '開始日
eDate = "2010/12/31" '終了日
r = 1
Do While ss.Range("A" & r) <> ""
Symbol = ss.Range("A" & r) '銘柄
url = "http://ichart.finance.yahoo.com/table.csv?g=d&ignore=.csv"
url = url & "&s=" & Symbol
url = url & "&a=" & Month(sDate) - 1 & "&b=" & Day(sDate) & "&c=" & Year(sDate)
url = url & "&d=" & Month(eDate) - 1 & "&e=" & Day(eDate) & "&f=" & Year(eDate)
'同名のシートの削除(手抜き版)
Application.DisplayAlerts = False
On Error Resume Next
Sheets(Symbol).Delete
On Error GoTo 0
Application.DisplayAlerts = True
'シートの追加とデータ読み込み
Set ds = Worksheets.Add(after:=Worksheets(Worksheets.Count))
With ds
.Name = Symbol
With .QueryTables.Add(Connection:="TEXT;" & url, Destination:=.Range("A1"))
.TextFileCommaDelimiter = True
.Refresh
End With
End With
r = r + 1
Loop
End Sub

p.s.
本当はいちいちSheet作ってquerytables.addしなくても.refreshだけでもいいかと思います。

例えばSheet1のA列に銘柄がある場合(A1=IBM,A2=DELL,A3=AAPL...など)、こんなのでは?
Sub sample1()
Dim ss As Worksheet
Dim ds As Worksheet
Dim url As String
Dim sDate As String
Dim eDate As String
Dim Symbol As String
Dim r As Long
Set ss = Sheets("Sheet1") 'またはActiveSheetなど銘柄があるシート
sDate = "1000/1/1" '開始日
eDate = "2010/12/31" '終了日
r = 1
Do While ss.Range("A" & r) <> ""
Symbol = ss.Range("A" & r) '銘柄
url = "http://ichart.finance.yahoo....続きを読む

QVBを2008を用いてCSVを取り込む ””で区切られていない数値混入

VBを2008を用いてCSVを取り込む ””で区切られていない数値混入 文字列に,が含まれている場合がある。

題名どおりなのですが、以下のようなCSVファイルをVB2008で取り込もうと考えています。
"AAAAA",BBBBB,CCCCC,"DDDD,DDD","EEEEE","FFFFF"

(同じアルファベットが本来同じ項目のデータ、BとCは0-9の数字のみ入ります
またBCには常に””が含まれません。
Dは文字列なのですが、まれに「,」が含まれます)

下のものが現在使用しているソースですがsplitで「,」を指定しているので
当然Dが2つのデータとして認識されています。
BやCが””で囲まれていれば「”,”」で区切ればすむのですが一部が””なしなので
どうやろうか迷っています。

実現したいこととしては
""なしの時は必ず、コンマまでが1つのデータ、
""があれば""で区切られたデータが1つのデータとできればいいんですが。。。


以下ソースです。 ちなみにASPXファイルです。
(replaceDoubleQuotesというのは”を削除するための関数で無視していただいて結構です。
また以下のソースでは取り込み自体はせずにタイトル行がはいっているCSVファイルを弾く作業をしているのですが
CSVからデータを取り出す作業は同じなので短いソースを使用させてもらっています)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

Dim Reader2 As New IO.StreamReader("C:\UploadedFiles\Uriage.txt", System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim Items2() As String 'CSVの各項目を表す配列
Dim Line2 As String = Reader2.ReadLine 'CSVの一行
Items2 = Line2.Split(",")
Dim num_hantei As String = "^[0-9]+$"


If Not (Regex.IsMatch(replaceDoubleQuotes(Items2(3)), num_hantei)) Then


Dim objFSO As Object
objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile("C:\UploadedFiles\Uriage.txt", True)
objFSO = Nothing
Label1.Text = "取り込みエラー。タイトル行がはいっている可能性があります。"
Exit Sub

End If
Reader2.Close()
End Sub
Function replaceDoubleQuotes(ByVal apdata As Object) As String
'文字列に変換する
Dim tmp As String = String.Format("{0}", apdata)
'1つのダブルクォーテーションを0個に置換する つまり消去する
replaceDoubleQuotes = tmp.Replace("""", "")
End Function

VBを2008を用いてCSVを取り込む ””で区切られていない数値混入 文字列に,が含まれている場合がある。

題名どおりなのですが、以下のようなCSVファイルをVB2008で取り込もうと考えています。
"AAAAA",BBBBB,CCCCC,"DDDD,DDD","EEEEE","FFFFF"

(同じアルファベットが本来同じ項目のデータ、BとCは0-9の数字のみ入ります
またBCには常に””が含まれません。
Dは文字列なのですが、まれに「,」が含まれます)

下のものが現在使用しているソースですがsplitで「,」を指定しているので
当然Dが2つのデータとして...続きを読む

Aベストアンサー

自力でやるよりTextFieldParserクラスがお勧め
http://www.atmarkit.co.jp/fdotnet/dotnettips/487csvparser/csvparser.html


人気Q&Aランキング

おすすめ情報