- ベストアンサー
【Access2000】CSVファイルのインポート方法
Access2000(OS:WinXP)でCSVファイルをインポートするVBAを作成しています。 Open "ファイル名" For Input As #txtFileNumber Input #txtFileNumber, txt1, txt2... 上記のようにtxt1,txt2...の変数に代入しているのですが、CSVファイルの行数が可変のため、どうすれば良いのか困っております。最大100フィールド程あるのですが…。何か良い方法がありましたらお教えください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
1,2,3,4 1,2,3,4,5,6 1,2,3,4,5,6,7,8 このような Test.csv があるとします。 Private Sub コマンド0_Click() Dim I As Integer Dim N As Integer Dim Datas() As String Datas() = FileReadArray("C:\Temp\Test.csv") N = UBound(Datas()) For I = 0 To N Debug.Print Datas(I) Next I End Sub [イミディエイトウィンドウ] 1,2,3,4 1,2,3,4,5,6 1,2,3,4,5,6,7,8 と、このように読み込むことが可能です。 Private Sub コマンド0_Click() Dim I As Integer Dim J As Integer Dim N As Integer Dim M As Integer Dim Datas() As String Dim Fields() As String Datas() = FileReadArray("C:\Temp\Test.csv") N = UBound(Datas()) For I = 0 To N Fields() = Split(Datas(I), ",") M = UBound(Fields()) For J = 0 To M Debug.Print Fields(J) Next J Debug.Print "---------" Next I End Sub と、改造すれば、各行の列データを取り出すことも可能です。 1 2 3 4 --------- 1 2 3 4 5 6 --------- 1 2 3 4 5 6 7 8 --------- ※参照設定で、Microsoft scripting runtime を参照するようにする必要があります。 ※長くなりますので、FileReadArray()はおって紹介します。
その他の回答 (2)
s_husky です。 FileReadArray()は、私が利用しているAccess の標準モジュール[ファイルアクセスライブラリ] の中の一つの関数です。 以下は、それに関する説明文です。 Microsoft のオブジェクト志向の成果の一つは、Scripting.FileSystemObject です。これによって、ファイルの読み込みや書き出しが画期的に簡単になりました。第三章では、更に、一歩進んだ、より簡便なファイルシステム関数を作成します。 scrrun.dll と参照設定 Scripting.FileSystemObject は、scrrun.dll で提供されています。そこで、Access の VBA が同 dll を参照するように設定する必要があります。VBA エディタを開き、[ツール(T)]-[参照設定(R)]の手順で参照設定を更新して下さい。 201: FolderExists() フォルダの有無を検査し真または偽を返します。 202: FileExists() ファイルの有無を検査し真または偽を返します。 203: FileSize() ファイルのサイズをバイト単位で返します。 204: GetFileList() フォルダの公的なファイル一覧を配列に格納します。 205: FileWrite() ファイルに文字列を書き込みます。 206: FileReadAll() ファイルの全てを読み込みます。 207: FileRead() ファイルの各行を順次に読み込みます。 208: FileReadArray() ファイルの各行を配列に読み込みます。 ・・・略・・・ Public Function FileReadArray(ByVal FileName As String) As String() On Error GoTo Err_FileReadArray Dim fso As FileSystemObject Dim fil As File Dim txs As TextStream Dim strText As String Dim strTexts() As String Set fso = New FileSystemObject Set fil = fso.GetFile(FileName) Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault) strText = txs.ReadAll strTexts = Split(strText, Chr$(13) & Chr$(10)) Exit_FileReadArray: FileReadArray = strTexts() Exit Function Err_FileReadArray: MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ" strTexts() = Split("") Resume Exit_FileReadArray End Function FileReadArray関数が読み込んだ配列の添字が -1 の場合は、読み込みが行われなかったことを示しています。
- DarkAngel-2002
- ベストアンサー率22% (42/186)
Open FNAME_XX For Input As #1 Do While Not EOF(1) Input #1, TXT1,TXT2,TXT3,・・・・・・・・・・ Loop Close #1 VB6使用
お礼
素早い回答感謝しております!早速試してみます。本当にありがとうございました。