VBAでのテキストデータ追記

このQ&Aのポイント
  • VBAを使ってデータをテキストファイルに追記したいと考えています。
  • A列だけでなく、A列からF列までのデータを追記させたいです。
  • 具体的な方法がわからないので、教えていただけますでしょうか?
回答を見る
  • ベストアンサー

VBAでのテキストデータ追記

VBAを使ってデータをテキストファイルに追記したいのですが、 A列だけじゃなく A列からF列までのデータを追記させたいと 考えているのですが、 どうやるのか理解できません。 教えていただけますでしょうか? -------------------------------------------------------------- Option Explicit ' テキストファイル書き出すサンプル Sub WRITE_TextFile() Const cnsTitle = "テキストファイル出力処理" Const cnsFilter = "テキストファイル (*.txt;*.dat),*.txt;*.dat" Dim xlAPP As Application ' Applicationオブジェクト Dim intFF As Integer ' FreeFile値 Dim strFileName As String ' OPENするファイル名(フルパス) Dim vntFileName As Variant ' ファイル名受取り用 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 Dim lngREC As Long ' レコード件数カウンタ ' Applicationオブジェクト取得 Set xlAPP = Application ' 「名前を付けて保存」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "出力するファイル名を指定して下さい。" ' (1) vntFileName = xlAPP.GetSaveAsFilename(InitialFilename:="SAMPLE.txt", _ FileFilter:=cnsFilter, _ Title:=cnsTitle) ' キャンセルされた場合はFalseが返るので以降の処理は行なわない If VarType(vntFileName) = vbBoolean Then Exit Sub strFileName = vntFileName ' 収容最終行の判定(Excel認知の最終行から上に向かってデータがある行を探す) With ActiveSheet If .FilterMode Then .ShowAllData ' オートフィルタ解除 End With GYOMAX = Cells(65536, 1).End(xlUp).Row ' (2) If GYOMAX < 2 Then xlAPP.StatusBar = False MsgBox "テキストをA列2行目から入力してから起動して下さい。", , cnsTitle Exit Sub End If ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(出力モード) Open strFileName For Output As #intFF ' (3) ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' (4) ' レコード件数カウンタの加算 lngREC = lngREC + 1 xlAPP.StatusBar = "出力中です....(" & lngREC & "レコード目)" ' レコードを出力 Print #intFF, strREC ' (5) ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE Close #intFF xlAPP.StatusBar = False ' 終了の表示 MsgBox "ファイル出力が完了しました。" & vbCr & _ "レコード件数=" & lngREC & "件", vbInformation, cnsTitle End Sub -----------------------------------------------------------------------------

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

  • ベストアンサー
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

2点確認 その1. >データをテキストファイルに追記したい 提示されたサンプルマクロは、Excelのデータをファイル名を付けてテキストファイルとして保存するもので、既存のテキストファイルに追記するものではないのですが 目的は a. テキストファイルとしての出力? b. 既存のテキストファイルへの追記? その2. >A列からF列までのデータを追記させたい a. A列からF列までの内容を連結したものを一行として扱いたいということでしょうか? b. A列からF列までの内容をセル単位で一行として扱いたいということでしょうか? 1-a,2-aならば ------------- ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' (4) ' レコード件数カウンタの加算 ------------- この部分を ------------- ' A列内容をレコードにセット(先頭は2行目) strREC = "" ketugo = 1 For ketugo = 1 To 6 strREC = strREC & Cells(GYO, ketugo).Text Next ketugo ' レコード件数カウンタの加算 ------------- こんな感じに変更することで対応可能と思われます やりたいことが違っていたらごめんなさい

chippe559
質問者

お礼

すばやい返信ありがとうございます。 素晴らしいですね。実際支持の通りしましたら 結合できたテキストファイルを排出できました。 その1のケースでてっきり私は追記する Append関数を 使ったものを質問文に乗せたと思っていたのですが 書き出し用のものを載せてしまったようです。 申し訳ありませんでした。追記する方法は問題 なくできました。 お時間ありがとうございました。

その他の回答 (1)

回答No.2

ここが参考になる。 VB テクニック編16 - Excel XLS シート読み込み、XLS シート書き込み http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t16.htm <<適当にいじったサンプル>> 'XLSシートのデータ(セル)をCSVファイルに変換出力 Option Explicit Sub XLS2CSV() Const xName = "D:\tmp\test.xls" Const xName2 = "D:\tmp\test.csv" Const xFrom = "A" Const xTo = "F" Dim exl As Object Dim xBuff As String Dim xLast As Long Dim kk As Long Dim nn As Long Set exl = CreateObject("Excel.Application") exl.Application.Visible = True exl.Application.Workbooks.Open Filename:=xName Open xName2 For Output As #1 Len = 32000 xLast = exl.Cells(Rows.Count, "A").End(xlUp).Row For nn = 1 To xLast xBuff = Empty For kk = 1 To 6 xBuff = xBuff & Chr(&H22) & exl.Cells(nn, kk) & Chr(&H22) & "," Next If Right(xBuff, 2) = (Chr(&H22) & ",") Then xBuff = Left(xBuff, Len(xBuff) - 1) End If Print #1, xBuff Next Close #1 exl.Application.DisplayAlerts = False exl.Application.Quit End Sub

chippe559
質問者

お礼

なるほど!!こういう処理もできるんですね。 勉強になります。 参考サイトも非常に勉強になりました。 ありがとうございました。大変助かりました。

関連するQ&A

  • Excel VBA読み込みで文字化けが

    Excel VBAにてメールデータを読み込むプログラムを組んでいます。 データの作り方は、 (1)Mozilla Thunderbirdでメールデータをtext形式で保存 (2)VBAにてtextデータを開く。 しかし読み込みを行うと、文字化けしたデータが表示されてしまいます。 どのように解決したらよいのでしょうか? 文字コード変換を行ってもダメでした。 Sub Read_mail_data() Const cnsTITLE = "テキストファイル読み込み処理" Const cnsFILTER = "全てのファイル (*.*),*.*" Dim xlAPP As Application ' Applicationオブジェクト Dim intFF As Integer ' FreeFile値 Dim strFileName As String ' OPENするファイル名(フルパス) Dim vntFileName As Variant ' ファイル名受け取り用 Dim strREC As String ' 読み込んだレコード名 Dim GYO As Long ' 収容するセルの行 Dim lngREC As Long ' レコード件数カウンタ ' Applicationオブジェクト取得 Set xlAPP = Application ' 「ファイルを開く」のダイアログでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE) ' キャンセルされた場合はFalseが返るので以降の処理は行わない If VarType(vntFileName) = vbBoolean Then Exit Sub strFileName = vntFileName ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(入力モード) Open strFileName For Input As #intFF GYO = 1 ' ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) ' レコード件数カウンタの加算 lngREC = lngREC + 1 xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)" ' 改行までをレコードとして読み込む Line Input #intFF, strREC ' 行を加算しA列にレコード内容を表示(先頭は2行目) GYO = GYO + 1 ' 文字コードを変換する 'StrConv(strREC, vbFromUnicode) = a Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode) Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode) Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode) Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode) Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode) Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode) ' セルにデータを書き込む 'Cells(GYO, 1).Value = strREC Loop ' 指定ファイルをCLOSE Close #intFF xlAPP.StatusBar = False ' 終了の表示 MsgBox "ファイル読み込みが完了しました。 " & vbCr & "レコード件数=" & lngREC & "件", vbInformation, cnsTITLE End Sub

  • VBAの初心者でやりたいことがあるのですが、どうやっていいのか分かりま

    VBAの初心者でやりたいことがあるのですが、どうやっていいのか分かりません。 やりたいことは 1.フォルダを指定してCSVファイルを読み込む。 2.読み込んだCSVファイルを一行あたり1ファイルのエクセルファイルに書き込む。 3.完成したエクセルファイルを印刷する。 4.フォルダの中のファイルが無くなれば終了 としたいのですが、途中で頓挫しています。 宜しくお願いします。 Option Explicit sub READ_TextFile() Const cnsTITLE = "フォルダ内のファイル名一覧取得" Const cnsDIR = "\*.*" Dim xlAPP As Application Dim strPATHNAME As String Dim strFILENAME As String Dim GYO As Long Const cnsFILTER = "全てのファイル (*.*),*.*" Dim xlAPP2 As Application' Applicationオブジェクト Dim intFF As Integer' FreeFile値 Dim X() As Variant' 読み込んだレコード内容 Dim IX1 As Long' CSV項目カラムINDEX Dim lngREC As Long' レコード件数カウンタ Dim strREC As String' レコード領域 Dim POS1 As Long' レコード文字位置 Dim POS2 As Long' レコード文字位置 Set xlAPP = Application strPATHNAME = xlAPP.InputBox("フォルダ名を入力して下さい。", _ cnsTITLE, "C:\Documents and Settings\hidekazu_miyawaki\デスクトップ\") If StrConv(strPATHNAME, vbUpperCase) = "FALSE" Then Exit Sub If Dir(strPATHNAME, vbDirectory) = "" Then MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTITLE Exit Sub End If strFILENAME = Dir(strPATHNAME & cnsDIR, vbNormal) Set xlAPP2 = Application Do While strFILENAME <> "" GYO = GYO + 1 Cells(GYO, 1).Value = strFILENAME strFILENAME = Dir() Open strFILENAME For Input As #intFF GYO = 1 Do Until EOF(intFF) lngREC = lngREC + 1 xlAPP2.StatusBar = "読み込み中です(" & lngREC & "レコード目)" Line Input #intFF, strREC POS1 = 1 IX1 = 0 ReDim X(IX1) Do While POS1 <= Len(strREC) POS2 = InStr(POS1, strREC, ",", vbTextCompare) If POS2 < POS1 Then POS2 = Len(strREC) + 1 End If ReDim Preserve X(IX1) X(IX1) = Trim$(Mid$(strREC, POS1, POS2 - POS1)) If (((Left$(X(IX1), 1) = """") And (Right$(X(IX1), 1) = """")) Or _ ((Left$(X(IX1), 1) = "'") And (Right$(X(IX1), 1) = "'"))) Then X(IX1) = Trim$(Mid$(X(IX1), 2, Len(X(IX1)) - 2)) End If POS1 = POS2 + 1 IX1 = IX1 + 1 Loop GYO = GYO + 1 If IX1 >= 1 Then Range(Cells(GYO, 1), Cells(GYO, IX1)).Value = X End If Loop Loop Close #intFF xlAPP.StatusBar = False MsgBox "ファイル読み込みが完了しました。" & vbCr & _ "レコード件数=" & lngREC & "件", vbInformation, cnsTITLE End Sub

  • CSVファイルをインポートするマクロについて

    CSVファイルをインポートするマクロを作成しようと思っているのが、作り方がわかりません。 アドバイスを下さい。 インポートするCSVの書式 "AAA","CC","DFD" "BBB","FF","HHH" "JJ","LL","JI" "Skip" "A","Y","JI","Y","JI" "B","L","JI","JI" "C","IL","JI" 1~3行目はエクセルのD3行,D4行,D5行 4行目はインポートしない 5行目以降はエクセルのA6行,A7行・・・にインポートしたいと思っております。 サンプルを作成して頂けないでしょうか。 下記のソースを元に作成しようとしているのですが、わからなくなってしまいました。 ◆作成途中のソース Sub READ_TextFile() Const cnsTitle = "テキストファイル読み込み処理" Const cnsFilter = "CSV形式ファイル (*.csv),*.csv" Dim xlAPP As Application ' Applicationオブジェクト Dim intFF As Integer ' FreeFile値 Dim strFileName As String ' OPENするファイル名(フルパス) Dim vntFileName As Variant ' ファイル名受取り用 Dim X() As Variant ' 読み込んだレコード内容 Dim IX1 As Long ' CSV項目カラムINDEX Dim GYO As Long ' 収容するセルの行 Dim lngREC As Long ' レコード件数カウンタ Dim strREC As String ' レコード領域 Dim POS1 As Long ' レコード文字位置INDEX Dim POS2 As Long ' レコード文字位置INDEX ' Applicationオブジェクト取得 Set xlAPP = Application ' 「ファイルを開く」のダイアログでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFilter, _ Title:=cnsTitle) ' キャンセルされた場合はFalseが返るので以降の処理は行なわない If VarType(vntFileName) = vbBoolean Then Exit Sub strFileName = vntFileName ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(入力モード) Open strFileName For Input As #intFF GYO = 13 ' ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) ' レコード件数カウンタの加算 lngREC = lngREC + 1 xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)" ' 行単位にレコードを読み込む Line Input #intFF, strREC ' (1) ' LineInputより自分で半角カンマを探しCSV→項目分割させる POS1 = 1 IX1 = 0 ReDim X(IX1) ' 配列を初期化 Do While POS1 <= Len(strREC) ' (2) POS2 = InStr(POS1, strREC, ",", vbTextCompare) ' (3) If POS2 < POS1 Then POS2 = Len(strREC) + 1 End If ReDim Preserve X(IX1) ' 配列要素数を再設定 X(IX1) = Trim$(Mid$(strREC, POS1, POS2 - POS1)) ' (4) ' シングルクォーテーション、ダブルクォーテーションで囲まれている場合は ' 両端文字を取り除く If (((Left$(X(IX1), 1) = """") And (Right$(X(IX1), 1) = """")) Or _ ((Left$(X(IX1), 1) = "'") And (Right$(X(IX1), 1) = "'"))) Then ' (5) X(IX1) = Trim$(Mid$(X(IX1), 2, Len(X(IX1)) - 2)) End If POS1 = POS2 + 1 IX1 = IX1 + 1 Loop ' 行を加算しレコード内容を表示(先頭は2行目) GYO = GYO + 1 If IX1 >= 1 Then Range(Cells(GYO, 1), Cells(GYO, IX1)).Value = X ' 配列渡し (6) End If Loop ' 指定ファイルをCLOSE Close #intFF xlAPP.StatusBar = False ' 終了の表示 MsgBox "ファイル読み込みが完了しました。" & vbCr & _ "レコード件数=" & lngREC & "件", vbInformation, cnsTitle End Sub

  • エクセルのCSV読み込みについて

    現在,以下の記述でエクセル上にマクロ実行ボタンを作成しました。 任意のCSVファイルをエクセルに取り込み利用する目的です。 実行ボタンを押すと,「実行時エラー ファイルにこれ以上データがありません。」として,記述中の 「Input #intFF, X(1), X(2), X(3), X(4), X(5), X(6), X(7) ' (2)」 部分が黄色になって止まってしまいます。 エクセル画面上には,希望通りのデータが出力されているようなので,このエラーが表示されなければデータの取り込みとしては問題ないのですが・・・。 どのようにこのエラーを回避し処理すればよいかかが分かりません。 どなたかご教示いただければ幸いです。 どうかよろしくお願いいたします。 Sub Macro4() ' CSV形式テキストファイル(7カラム)読み込みサンプル Const cnsTITLE = "テキストファイル読み込み処理" Const cnsFILTER = "CSV形式ファイル (*.csv),*.csv,全てのファイル(*.*),*.*" Dim xlAPP As Application ' Applicationオブジェクト Dim intFF As Integer ' FreeFile値 Dim strFileName As String ' OPENするファイル名(フルパス) Dim vntFileName As Variant ' ファイル名受取り用 Dim X(1 To 7) As Variant ' 読み込んだレコード内容 ' (1) Dim GYO As Long ' 収容するセルの行 Dim lngREC As Long ' レコード件数カウンタ ' Applicationオブジェクト取得 Set xlAPP = Application ' 「ファイルを開く」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _ Title:=cnsTITLE) ' キャンセルされた場合はFalseが返るので以降の処理は行なわない If VarType(vntFileName) = vbBoolean Then Exit Sub strFileName = vntFileName ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(入力モード) Open strFileName For Input As #intFF GYO = 1 ' ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) ' レコード件数カウンタの加算 lngREC = lngREC + 1 xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)" ' レコードを読み込む(このサンプルは7項目のCSV) Input #intFF, X(1), X(2), X(3), X(4), X(5), X(6), X(7) ' (2) ' 行を加算しA~G列にレコード内容を表示(先頭は2行目) GYO = GYO + 1 Range(Cells(GYO, 1), Cells(GYO, 7)).Value = X ' 配列渡し ' (3) Loop ' 指定ファイルをCLOSE Close #intFF xlAPP.StatusBar = False ' 終了の表示 MsgBox "ファイル読み込みが完了しました。" & vbCr & _ "レコード件数=" & lngREC & "件", vbInformation, cnsTITLE End Sub

  • エクセル VBA テキストファイル書き出す応用?

    以下のページより、 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_040.html Option Explicit ' テキストファイル書き出すサンプル(2) Sub WRITE_TextFile2() Const cnsFILENAME = "\SAMPLE.txt" Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 ' 最終行の取得 GYOMAX = Range("A65536").End(xlUp).Row ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(出力モード) Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' レコードを出力 Print #intFF, strREC ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE Close #intFF End Sub ------------------------------------------------------------- これを参考にしてテキストファイル書き出すのは出来たのですが、 今回は、ちょっと応用で以下のようにしたいです。 Sheet1のA2~A20までテキストファイル名が書いてあるとします。 また、Sheet2~Sheet20ぐらいまで、各Sheetに文章が入っているとします。 テキストファイルに書きだしたいのですが、 Sheet2の内容は、Sheet1のA2のファイル名 Sheet3の内容は、Sheet1のA3のファイル名 Sheet4の内容は、Sheet1のA4のファイル名 このようにしたいのですが、どのようにすればいいのか教えてください。 よろしくお願います。

  • FSOでテキストファイルのデータをエクセルに書き出

    FSOでテキストファイルのデータをエクセルに書き出すには? http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_040.html を参考に、 メモ帳の中身をエクセルに書き出そうとしてるのですが、 参考サイトを自分なりにアレンジしてみたのですが、何も書き出されません。 Sub WRITE_TextFile3() Const cnsFILENAME = "C:\Windows\PrimoPDF Setup Log.txt" Dim FSO As New FileSystemObject ' FileSystemObject Dim TS As TextStream ' TextStream Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 ' 最終行の取得 GYOMAX = Cells(Rows.Count, "A").End(xlUp).Row ' 指定ファイルをOPEN(出力モード) Set TS = FSO.CreateTextFile(Filename:=cnsFILENAME, Overwrite:=True) ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' レコードを出力 TS.WriteLine strREC ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE TS.Close Set TS = Nothing Set FSO = Nothing End Sub そもそも、 ' 最終行の取得 GYOMAX = Cells(Rows.Count, "A").End(xlUp).Row で、なぜ最終行を取得するのかがわかりません。 書き出そうとしているシートには何も入ってないので、 GYOMAXは1になります。 そして、 ' 2行目から開始 GYO = 2 で、なぜ 2行目から開始から開始するのかわかりません。 ご回答よろしくお願いします。

  • エクセル⇒テキストへ書込んで名前を付けて保存する時に、現在の日時を入れるにはどうすれば良いでしょうか?

    エクセル⇒テキストへ書込んで名前を付けて保存する時に、現在の日時を入れるにはどうすれば良いでしょうか? 下記構文の、Const cnsFILENAME = "\FILE_" & yyyy-mm-dd & ".sh" の & yyyy-mm-dd &の部分に入れたのですがいい方法をご教授下さい。 お願い致します。 Const cnsFILENAME = "\FILE_" & yyyy-mm-dd & ".sh" 'ファイル名 intFF = FreeFile ' FreeFile値の取得(以降この値で入出力する) Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF Do Until GYO > GYOMAX ' 最終行まで繰り返す ' A列内容をレコードにセット(先頭は1行目) strREC = Cells(GYO, 1).Value Print #intFF, strREC ' レコードを出力 GYO = GYO + 1 ' 行を加算 Loop Close #intFF ' 指定ファイルをCLOSE

  • ファイル書き出しのエクセルマクロ

    試行錯誤でマクロを作っているのですが、エラーが出てしまいます。 コンパイルエラー 定数式が必要ですと出てしまいます。 Const cnsFILENAME = "C:\" & の & で出ます。 どうすればいいのかお教えねがえませんでしょうか? よろしくお願いします。 (帰りに本を買って帰ります。。。) 'テキストファイル書き出す Dim S5 As Worksheet Set S5 = Worksheets("TEMP") Const cnsFILENAME = "C:\" & S5.Range("D4") & ".TXT" Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 ' 最終行の取得 GYOMAX = Range("A65536").End(xlUp).Row ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(出力モード) Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF ' 1行目から開始 GYO = 1 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' レコードを出力 Print #intFF, strREC ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE Close #intFF End Sub

  • EXCELのVBAでEOFを誤認識

    すみません、ファイルからデータを読み込んでいるのですが、変なコードが入っているらしく、EOFはきちんと認識できず、困っています。 文字コードも何かわからなず、半角空白でもないようです。読み込みファイルの2行目の"ー"と"&"の間にある見えない文字コードです。(さくらエディタでは半角空白に見えてます。) 何なのかも私にはわかりませんが解決方法をご教授願います。このコードを削除するば良いですが、大量にあり手動では削除困難です。 (出来れば以下のサンプルプログラムを修正する形で教えてもらえると助かります。) 簡単なVBAコードと読み込みファイルをお付けしますので、解決策をご教授方よろしくお願いします。 (以下のコードでも問題は発生します。) 添付ファイルが付けれないし、コードは変換されて表示されそうです。。。 その場合はどうやって調べれば良いかご教授頂ければと思います。 ----------VBAプログラム(Excel2007で作成)---------- Option Explicit Sub testLoadFile() Dim intFF As Integer ' FreeFile値 Dim lngREC As Long ' レコード件数カウンタ Dim strREC As String ' レコード領域 Dim opnFileName As String ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(入力モード) opnFileName = ActiveWorkbook.Path & "\loadtest.txt" Open opnFileName For Input As #intFF lngREC = 0 ' ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) ' レコード件数カウンタの加算 lngREC = lngREC + 1 ' 行単位にレコードを読み込む Line Input #intFF, strREC Cells(lngREC, 1).Value = strREC Loop ' 指定ファイルをCLOSE Close #intFF End Sub --------読み込みファイルテキスト(3行のファイルです。)------------ "aaa","3" "cccー&","4" "bbb","5"

  • Excel VBA: Inputステートメントで読み込むと、データ中のカンマで切れてしまう。

    いつも皆様ありがとうございます。 ExcelのVBAで、以下の仕様のテキスト・ファイルを1行ずつ読み込もうとしています。 【仕様】 ・1行は1つ以上のスペースで区切られた複数の値から成る。 ・値中に、半角カンマが含まれる場合がある。 値中にカンマが存在しない場合は、問題なく改行まで読み込まれるのですが、カンマがあるとそのカンマ以降のデータが読み込まれません。 Dim intFF As Integer 'FreeFile値 Dim strFileName As String 'ファイル名 Dim strRec As String '1行の読み込み内容 strFileName = "TEST.txt" intFF = FreeFile Open strFileName for Input As #intFF Do Until EOF(intFF) Input #intFF, strREC ' ※1 ・・・(省略) 上記※1のコード実行後にstrRECの中を見ると、カンマ以降の文字列が読み込まれていません。 例えば「A BB CCC DDDD」というデータの場合は問題なくそのままの値がstrRECの中に入っていますが、「A BB CC,C DDDD」というデータだと「A BB CC」というようになってしまいます。 Inputステートメントについて調べましたが、区切り文字に関する記述がなかったので困っています。 もし原因をご存知の方がいらっしゃいましたらお教えいただけないでしょうか。 よろしくお願いいたします。

専門家に質問してみよう