VB6で特定フォルダのCSVファイルを指定して開く

このQ&Aのポイント
  • VB6で特定フォルダのCSVファイルを指定して開く方法を教えてください
  • CSVファイルを読み込み、配列に格納するVB6のプログラムの書き方を教えてください
  • 別のフォルダにあるCSVファイルをVB6で読み込む方法を教えてください
回答を見る
  • ベストアンサー

VB6で特定フォルダのCSVファイルを指定して開く

 お世話になります。  ある株価を記すCSVファイルを読んで、配列格納しようと下記プログラムを書いてみましたが、 この状態では「読み込み対象のファイル」が「このVBプロジェクト」と同じフォルダに入っていなければならないようです。    そこで C:\IR_NK\USDJPY_20071010.csv の USDJPY_20071010.csv を読むというように、「別のフォルダのファイル」を読み込むように書き換えたいです。  この場合、どのように書けばいいか教えて欲しいです。 Private Sub C_FJU() Dim H_R(2) As Integer Dim HI_R(2, 8000) As String Dim intFileNo As Integer Dim strTextLine As String Dim strTxtDat As String intFileNo = FreeFile Open "USDJPY_20071010.csv" For Input As #intFileNo Do While Not EOF(intFileNo)  Input #intFileNo, strTextLine H_R(0) = H_R(0) + 1 HI_R(0, H_R(0)) = Trim(strTextLine) strTxtDat = strTxtDat & strTextLine & vbCrLf Loop T_HYO.Text = strTxtDat  Close #intFileNo End Sub

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>Open "USDJPY_20071010.csv" For Input As #intFileNo Open "C:\IR_NK\USDJPY_20071010.csv" For Input As #intFileNo ではなくて? それともフォルダは任意に選択するようにしたい?

ryu8472
質問者

お礼

Open "C:\IR_NK\USDJPY_20071010.csv" For Input As #intFileNo  こんなのでよかったのですね。   フォルダの選択はできますが。。。  ヘンな質問でしたが、即答大変有難うございました。

関連するQ&A

  • VBAでCSVファイルを読み込もうとしていますが、

    VBAでCSVファイルを読み込もうとしていますが、 「ファイルが見つかりません」とエラーが表示されます。 どのように対処していいのかわかりません。 教えてくください。 Sub readCsv() Dim csvFile As String Dim ch As Integer Dim csvStr As String Dim str() As String Dim i As Integer Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) targetFolder = oFolder.Items.Item.Path Set fso = CreateObject("Scripting.FileSystemObject") Set fileList = fso.GetFolder(targetFolder).Files For Each file In fileList csvFile = file.Name ch = FreeFile Open csvFile For Input As #ch i = 1 Do While Not EOF(1) Line Input #ch, csvStr Close #ch str = Split(csvStr, ",") Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str i = i + 1 Loop Next End Sub

  • VB5でCSVデータをAccess97のDBへセット

    普段はVB.NETの開発をすこししているのですが VB5のプログラムの修正の依頼が来て困っています。 CSVのデータをVB5でAccess97のDBへデータセットしたいのですが VB.Netでは同様のプログラムを作成した事があるのですが VB5は全然仕様が違うので困っています。 VB5でCSVを読み込んで配列にセットするにはどのように したらいいのでしょか?CSVを行で読み込むところは なんとか調べてわかりましたが、VB5ではSplitや配列が使えそうに ないのでどのようにしたらいいのかわかりません。 よろしくお願いします。 現在のソース Dim strTextLine As String Dim strTxtDat As String intFileNo = FreeFile Open "c:\infile.csv" For Input As #intFileNo Do While Not EOF(intFileNo) Line Input #intFileNo, strTextLine Loop Close #intFileNo

  • Excelマクロでフォルダ内のCSVファイルを一括で読み込ませるには?

    Excelファイルと同階層にあるCSVファイルを読み込ませるマクロを作ってみたのですが、正常に動作しません。 アドバイスいただければ幸いです。 Excel2003を使用しています。 Sub 同階層フォルダ内のCSV読込_Click() Dim fname As String 'ファイル名 Dim pathname As String 'パス名 Dim dat(1 To 4) As Variant '読み込んだデータ Dim rr As Long '対象行番号 Dim i As Integer '列のオフセット Dim j As Integer 'ファイル識別番号のオフセット '同階層フォルダ内のCSVファイルを参照 pathname = ".\*.csv" fname = Dir(pathname, vbNormal) 'データを挿入する行番号 rr = 2 '該当するファイルがある間 Do While fname <> "" j = 0 j = j + 1 'ファイルを開く Open fname For Input As #j 'ファイルの終端まで Do Until EOF(j) 'データを取得 Input #j, dat(1), dat(2), dat(3), dat(4) '読み込んだデータをセルに出力 For i = 1 To 4 Cells(rr, i).Value = dat(i) Next '行番号を更新 rr = rr + 1 Loop Close #j 'フォルダ内の次のファイルを検索 fname = Dir() Loop End Sub

  • CSVから構造体へ代入

    お世話になります。 Private Type TestRecord Col1 As String * 255 Col2 As String * 255 Col3 As String * 255 End Type Sub ボタン1_Click() Dim FName As String Dim FileNo As Integer Dim LineData As String Dim TestRec() As TestRecord FileNo = FreeFile '選択したファイル名の取得 FName = Application.GetOpenFilename("CSV ファイル (*.CSV),*.CSV") If FName = "False" Then Exit Sub End If Open FName For Input As #FileNo Do Until EOF(FileNo) i = i + 1 Line Input #FileNo, LineData ReDim TestRec(i) TestRec() = Split(LineData, ",") Debug.Print buf Loop Close #FileNo End Sub ファイルの中身 "テストID1","テスト姓1","テスト名1" "テストID2","テスト姓2","テスト名2" 以上のコードを実行するとTestRec() =~の部分で型が一致しません とエラーが出てしまいます。 よき解決方法があれば教えてください。宜しくお願いします。

  • ファイルを読み込んだらVBがフリーズする

    ↓のコードだと、ファイルを読み込んだ時点でVBがフリーズします(平気なファイルも一部ある)。原因と解決法を教えてください。 Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist CommonDialog1.CancelError = True On Error Resume Next CommonDialog1.ShowOpen If (Err = 0) Then FileRead CommonDialog1.FileName End If On Error GoTo 0 End Sub Private Sub FileRead(FL As String) Dim FileNo As Integer Dim strDAT As String Dim strELM As String Dim pot1 As Integer, pot2 As Integer Dim pDB1 As Integer, pDB2 As Integer FileNo = FreeFile() Open FL For Input As #FileNo While Not EOF(FileNo) Line Input #FileNo, strDAT strDAT = strDAT & ":" pot1 = InStr(strDAT, ":") While pot1 > 0 strELM = Left(strDAT, pot1) pot2 = InStr(strELM, "OPEN") While pot2 > 0 pDB1 = InStr(strELM, Chr(&H22)) If pDB1 > 0 Then '前の『"』の位置 pDB2 = InStr(pDB1 + 1, strELM, Chr(&H22)) If pDB2 > 0 Then RichTextBox1.Text = RichTextBox1.Text & _ Mid(strELM, pDB1 + 1, pDB2 - pDB1 - 1) & vbCrLf End If End If pot2 = InStr(pDB2 + 1, strELM, "OPEN") Wend strDAT = Mid(strDAT, pot1 + 1) pot1 = InStr(strDAT, ":") Wend Wend Close #FileNo End Sub

  • VB6 「Line Input」でのリークについて

    VB6での「Line Input」命令使用時のメモリリークについて教えて下さい。 1分毎に3600行のCSVファイルを読み込むプログラムを作成しています。  (CSVファイルは1行500文字程度) 以下の【パターン1】は作成したプログラムの1部ですが、 (1)を3600回ループ時にパフォーマンスモニタでの「Private Bytes」が増加してしまいます。   (1ループ毎に増加せず、数十回ループする毎に増加します。) 試しに【パターン2】を作成し、CSVファイルはオープンのみ行い、 読み込みは行わずに、500文字の文字列が入った変数をコピーした場合は、 「Private Bytes」は増加しません。 基本的に違いは(1)と(2)の箇所だけなのですが、 「Line Input」命令の使用方法などで間違っている箇所があるのでしょうか? ご存知の方、教えて下さい。お願いします。 【パターン1】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim FP As Integer 'ファイル番号 (省略) : FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) Line Input #FP, CsvDataBuf(i)     ←(1) i = i + 1 Loop Close #FP : (省略) 【パターン2】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim tempBuf As String Dim FP As Integer 'ファイル番号 (省略) : tempBuf = "~500文字の文字列~" FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) CsvDataBuf(i) = tempBuf       ←(2) i = i + 1 Loop Close #FP : (省略)

  • CSVの読み込み処理について

    こんばんわです。 エクセルのVBAをつかってCSV形式のファイルデーターを読み込みように某サイトを参考に作成しました。 確かに読み込む事が出来たのですが、数値も文字列扱いになってしまいます。 数値処理する方法があるのでしょうか? Sub CSV_Read2() Dim FileType, Prompt As String Dim FileNamePath As Variant Dim textline, csvline() As String Dim Rowcnt, ColumNum As Integer Dim ch1 As Long FileType = "CSV ファイル (*.csv),*.csv" Prompt = "CSV File を選択してください" '操作したいファイルのパスを取得します FileNamePath = SelectFileNamePath(FileType, Prompt) If FileNamePath = False Then 'キャンセルボタンが押された End End If '空いているファイル番号を取得します ch1 = FreeFile 'FileNamePath のファイルをオープンします Open FileNamePath For Input As #ch1 'エラーが発生したらファイルを閉じます 'CSVのファイルは1行の項目数が正確に合っていないと読めないのですが、 '色々なCSVがあるようなので入れておきます On Error GoTo CloseFile '表の行番号の初期化 1行目から読み込んだデータを入力します Rowcnt = 1 Do While Not EOF(ch1) 'ファイルの終端かどうかを確認します。 '1行読み込みます Line Input #ch1, textline 'ダブルクォーテーションを削除します 'カンマ+ダブルクォーテーションで区切られている CSV ファイルなどは '適時追加してください textline = Replace(textline, """", "") 'カンマで分離します csvline() = Split(textline, ",") '配列渡しでセルに代入 Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = csvline() Rowcnt = Rowcnt + 1 Loop CloseFile: 'ファイルを閉じます Close #ch1 End Sub Function SelectFileNamePath(FileType, Prompt) As Variant SelectFileNamePath = Application.GetOpenFilename(FileType, , Prompt) End Function Function GetItemNum(FileNamePath) As Integer Dim ch1 As Long Dim textline As String '空いているファイル番号を取得します ch1 = FreeFile 'FileNamePath のファイルをオープンします Open FileNamePath For Input As #ch1 Line Input #ch1, textline '1行だけ読み込みます。 Close #ch1 GetItemNum = 1 '1行中のカンマの数を数えます Do GetItemNum = GetItemNum + 1 textline = Mid(textline, InStr(textline, ",") + 1) Loop Until InStr(textline, ",") = 0 End Function

  • VBAフォルダ内ファイル入出力について

    Accessで特定のフォルダ内にあるcsvファイルを全て読み込み、別のcsvファイルへ 出力するという処理を作りたいのですが、最近からVBAを始めたばかりで どうすればよいか分かりません。 とりあえず、特定のファイルをひとつ読み込み、別ファイルへ出力することはできました。 Option Compare Database Private Sub Button_Click() Dim No As Integer Dim buf No = FreeFile Open "C:\test1.csv" For Input As #1 Open "C:\test2.csv" For Output As #2 Do Until EOF(No) Line Input #1, buf Print #2, buf Loop MsgBox "処理終了" Close #1 Close #2 End Sub 読み込み対象を「特定のフォルダ内のファイル全て」 にする方法が知りたいです。 ちなみに出力先のファイルはひとつにまとめてもそれぞれ別のファイルに 出力でもどちらでも構いません。 できれば両方教えていただければ有難いです。 宜しくお願いします。

  • ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルを

    ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルをすべてアクセスのテーブルにインポート使用と思っています。 ところがCSVファイルの数の分だけ、1つめのCSVファイルの中身が繰り返しインポートされてしまっています。 どの部分に誤りがあるのでしょうか? お知恵を拝借できますでしょうか・・・。 コードは以下になります。 Private Sub cmd06_Click() Dim MyFile As String Dim MyName As String Dim MyName02 As String Dim strFolderName As String strFolderName = GetFolderName() 'フォルダ選択ダイアログを表示 If Len(strFolderName) > 0 Then '選択結果を評価 MyFile = strFolderName & "\*.csv" '【拡張子csvのファイルのみ取得】 MyName = Dir(MyFile, vbNormal) MyName02 = "\" & MyName Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If GetAttr(strFolderName & "\" & MyName) <> vbDirectory Then DoCmd.TransferText acImportFixed, "T03_インポート定義", "T03_全CSVデータ", strFolderName & MyName02, False, "" '【取得したファイルをインポート】 End If End If MyName = Dir Loop Else MsgBox "フォルダは選択されませんでした" End If MsgBox "データのインポートが終了しました" End Sub

  • 指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています

    エクセルで、指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています。 現在下記のようなマクロを途中まで作成したのですが、保存の良い方法が分からず困っております。 (ファイルオープンまでは出来ているようですが、その後エラーが出てしまいます) どなたかお知恵を拝借願えませんでしょうか。 どうぞ宜しくお願い致します。 Sub Book_Open() Dim BookName As String Dim PathName As String PathName = "C:\test_htmltocsv\test\" BookName = Dir(PathName & "*.html") Do Until BookName = "" Workbooks.Open PathName & BookName BookName = Dir() ActiveWorkbook.SaveAs "Sample.xls" ←← Loop End Sub

専門家に質問してみよう