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

Access2000(OS:WinXP)でCSVファイルをインポートするVBAを作成しています。

Open "ファイル名" For Input As #txtFileNumber
Input #txtFileNumber, txt1, txt2...

上記のようにtxt1,txt2...の変数に代入しているのですが、CSVファイルの行数が可変のため、どうすれば良いのか困っております。最大100フィールド程あるのですが…。何か良い方法がありましたらお教えください。

A 回答 (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()はおって紹介します。
    • good
    • 0

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 の場合は、読み込みが行われなかったことを示しています。
    • good
    • 0
この回答へのお礼

素早い回答感謝しております!早速試してみます。本当にありがとうございました。

お礼日時:2006/09/21 14:38

Open FNAME_XX For Input As #1



Do While Not EOF(1)
Input #1, TXT1,TXT2,TXT3,・・・・・・・・・・
Loop

Close #1


VB6使用
    • good
    • 0

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