• ベストアンサー

CSVファイルの取り込み

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

質問者が選んだベストアンサー

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.4

こんな感じです。 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の方が楽だと思いますよ。

ichihachi
質問者

お礼

どうも細かく書いていただきましてありがとうございます。 これだけ書かれていると、これに手を加えるだけでほぼ出来 てしまいますね! 一応これで作ってみようかと思います。 それでできた時にSQL*Loaderを使ってみたいと思います。 何事も勉強なので・・・

その他の回答 (4)

  • arata
  • ベストアンサー率49% (139/279)
回答No.5

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

noname#25358
noname#25358
回答No.3

 SQL*Loader は駄目なんでしょうか?  CSVをオラクルに取り込むという、そのものずばりなツールがオラクルには最初から入っています。  使い方はオラクルのオンラインヘルプで見れたはずですが、これはユーザーならみんな見れたんでしたっけ……。

ichihachi
質問者

お礼

VBのオンラインヘルプばかり見ていたので、家に帰ってか ら一度見てみます。 どうもありがとうございました。

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.2

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データが入る事になる  ここで注意。これでは、ただカンマ等のデータが抜けた事になるので、格納用変数には、配列を使用する等の手段を用いる必要がある。

ichihachi
質問者

お礼

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

  • gould09
  • ベストアンサー率33% (196/589)
回答No.1

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 ' ファイルを閉じます。

ichihachi
質問者

お礼

どうもありがとうございました。 大変参考になりました。

関連するQ&A

  • CSVデータの取り込み

    開発環境 言語 VB6.0 DB  ACCESS 一つ目は、CSVデータをACCESSに保存したいのですがどうしたらいいですか? 開発環境 言語 VB6.0 DB  ORACLE9i 二つ目は、CSVデータをORACLE9iに保存したいのですがどうしたいいですか? どうかよろしくお願いします。

  • CSVファイルの取り込みについて。

    エクセルからCSVに変換したファイルを、 Accessのテーブルに取り込みたいと考えています。 電話番号など、 頭に0(ゼロ)のつくデータをCSVに変換すると、 頭の0(ゼロ)が外れてしまうと思います。 テーブルに取り込んだときには、 頭の0(ゼロ)が付いた形にしたいのですが、 どうしたら良いのでしょうか? 取り込んだ後に変換するのでもかまいません。 ご教示下さい。

  • MDBファイルをCSV出力したい

    こんばんは。 環境: OS:WINDOWS2000 VB6.0 sp5 アクセス2000 VBからアクセスのMDBデータをCSV形式で出力させようとしています。  mdbファイルが実行中にVBのexeを起動してcsvファイルを取得したいのですが、いい方法が分かりません。 閉じているMDBファイルのデータをCSVで出力することは可能です。  MDBファイルが開いているとexeを実行した時に「実行時エラー7866 データベースが開いています」というようなメッセージが出て処理ができません。 なにかいい方法はないでしょうか よろしくお願いいたします。

  • 複数CSVファイルからEXCELへ取り込み

     複数のCSVファイルを読み込んでEXCELのシートにまとめるやり方は,以前にOKWaveのページでmerlionXXさんがbatwithさんの質問に答えているのがあって,参考にさせていただきました。  そこでそのアレンジとして次の様に変更したいのですが,教えていただけないでしょうか?  複数CSVファイルからのデータ読み出しは同じですが,読み出し時にCSVファイルの指定範囲のデータを足したり,平均とったり,最大値・最小値を検索したりして,その結果のみをEXCELに追記していきたいのです。つまりCSVファイルからデータそのものをEXCELに転記してから計算や検索をすれば目的は達成出来ますが,データそのものをEXCELに転記する必要はないため,計算や検索の結果のみを転記してEXCEL表を小さくしたいのです。  ちなみにCSVファイルは毎日1個できる同じフォーマットのファイル。EXCELファイルは日付ごとに1行のデータ集計結果が追記される表です。  どなたかよろしくお願いいたします。

  • VB6.0 で CSVファイルをEXCELで起動

    VB初心者です。 質問内容なのですが、 VBで「ドライブ/ディレクトリ/ファイルリストボックス」を用いて、ファイルボックスから表示されたファイルをクリックしてCSVファイルをEXCELで起動したいプログラムを作成したいのですが、 CSVファイルをクリックしたときにEXCELで起動する部分のプログラムがわかりません。 言葉足らずの部分が多々あるかと思いますが、手が空いたときにでも、御教授を宜しくお願い致します。

  • CSVファイルをExcelで開く!

    皆さんこんにちわ 標題のように、ExcelにてCSVファイルを開いた場合、「0001」(CSV側)というデータは、0が削られ「1」(Excel側)へと変換されてしまいます。 Excelで開いた際に、はじめから0001の状態で(後でセルの書式設定でいじるのではなく・・・)表示したいのですが、どうしたら宜しいでしょうか? この質問の背景: 駆け出しSEです。 プログラムの経験はあるのですが、Excelについてはちんぷんかんぷんです。 上司と上記の現象の解決策を練っていたのですが、二人ともExcelに疎く、「VBで書くしかないんじゃない?」 とかなってきました。。。 ほんとに他の解決策がないのかをお尋ねしたいのです! よろしくお願い致します。

  • CSVファイル読込みについて

    CSVファイル読込みで困っています。 どなたかご教授をお願い致します。 CSVファイル読込みを行うと、複数行のデータにも関わらず、ネットで調べたプログラムを用いると、1行で読込まれてしまいました。 その原因として、NL(LF)で改行されていたためです。 これをどうにか複数行で読込みを行うための方法はありませんか? NLがある場合、それをvbCrLfに変換してやればよいとは思ったのですが、うまくプログラムを組むことができません。 プログラムをどう組めばよいのか教えて頂けないでしょうか? 以下のサイトを利用させて頂き、読込みを行おうとしました。 http://www.k1simplify.com/vba/tipsleaf/leaf291.html VB初心者なので、どなたかご教授頂けると助かります。 よろしくお願い致します。

  • AccessへのCSVファイルの取り込み

    CSVファイルが複数あるのですが、それを取り込んでひとつにまとめたいと思っています。 数が多いので、どうにか簡単に出来る方法はありませんでしょうか。 今は、インポートしたCSVのデータをコピーして貼り付けているので、数が増えてくると大変な手間です。 やはり、プログラムなんかを使わないとだめなのでしょうか。 あるいは、そういうアプリケーションはありますか? 情報をお持ちの方、よろしくお願いします。

  • VB2010でCSVへ書き込みする方法

    いつも参考にさせていただいております。 当方会社でVB2010を使い、何人かに配布をして使ってもらうのが目的です。 しかし、データベース構築は考えておらず、それぞれでデータは完結するものです。 そこでCSVファイルが一番良いと判断しましたが、書き込み方法がわかりません。 EXCELファイルに書き込むことはできるのですが、同じように配列を指定できるのでしょうか? 持っている本では詳しく載っていなかった為、サンプルコード等を教えていただけないでしょうか? 調べてみましたが2010のサイトが少ない為、投稿させていただきました。ご教授願います

  • CSVファイルのエクセル取込(VBA)で小数三位が消える!?

    エクセルにCSVファイルから読み取りをするVBAで下記のように記述しています。 Sub CSV読取り Dim FName As Variant FName = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv") Open FName For Input As #1 For i = 1 To 400 Input #1, Columni ThisWorkbook.Sheets("CSV取得").Cells(i, "E").Value = Columni Next i Close #1 End Sub これでほとんどのデータ(数値や文字列の400件)をうまく読み取るのですが、どういう訳かデータが小数点以下第三位まである数値の場合、エクセルに取り込まれた段階で小数点以下第二位までに四捨五入されてしまうようです。 そのうえ、エクセルのセルの表示形式がそこだけ通貨(¥マーク付き)になっています。 なぜでしょうか? またどうしたら正しく小数3位まで読み取れるのでしょうか? CSVファイルをエクセル単純にエクセルで開けばちゃんと小数三位まであるのですが、データが横一列にカンマ区切り400件あるので256列しかないエクセルではすべてとりこめません。(だから上記のマクロで縦に変換してとりこんでいるのですが) 非常に困っています。