Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
テキストデータ読込で"これ以上ファイルがない"sが出てしまう。
投稿日時: 19/10/22 15:39:39
投稿者: FANTA66

いつも拝見しております。
 
あらかじめ開いているExcelに以下のようなプログラムでテキストデータを読込みしようと思うのですが、
データは読込は終了までできるのですが、エラーで「ファイルにこれ以上データがありません。」
と表示されてエラーが出ないようにうまく作れません。いろいろと試してみましたが、エラーになってしまう箇所が見つけられません・・。
ご教授お願いいたします。
 
 ・テキストデータの項目(koMoku)は10種類あります。
 ・項目の中には、数値と""で囲まれた文字列などがあります。
 
Sub カンマ区切りでテキストファイルを読込む()
    Dim gyoFileNo As Integer, koMoku(10) As String
    Dim i As Integer, j As Integer
    gyoFileNo = FreeFile(1)
    Open "F:\テキストデータ\001.txt" For Input As #gyoFileNo
    i = 1
    Do Until EOF(gyoFileNo)
        Input #gyoFileNo, koMoku(0), koMoku(1), koMoku(2), koMoku(3), koMoku(4), _
            koMoku(5), koMoku(6), koMoku(7), koMoku(8), koMoku(9), koMoku(10)
        For j = 0 To 10
            Cells(i, j + 1).Value = koMoku(j)
        Next j
    i = i + 1
    Loop
    Close #gyoFileNo
End Sub

回答
投稿日時: 19/10/22 17:17:27
投稿者: 半平太

テストしたら、こちらでも同じエラーになりました。
 
そのファイルは「カンマ区切り」でなく、ホントは「タブ区切り」と違いますか?
 
メモ帳で開いて、カンマがあるか確かめて頂けませんか?(無理にとは言いませんが・・)

回答
投稿日時: 19/10/22 17:34:33
投稿者: 半平太

あと、普通にエクセルで開いて、
コピーしたら簡単じゃないかと思うんですが、
 
それでは何か支障があるんでしょうか?

投稿日時: 19/10/22 17:39:23
投稿者: FANTA66

早速、ありがとうございます。
データ詳細を載せなくて誠に申し訳ござません。
 
以下はテキストファイルの一、二行目です。
社員番号,サブ番号,"氏名漢字",郵便番号,"住所1","住所2","住所3",所属番号,部内番号,"部署名",グループ番号
295361,54140076,"苗字 氏名",152-0000,"目黒区目黒本町","1−9999","住所3",697,28,"業務管理部",5
 
以上のように カンマ区切り ですが、一部文字列には""で囲んである文字列の部分があります。
これが「悪さ」の原因だと思うのですが・・。
もう一度、よろしくお願いいたします。

投稿日時: 19/10/22 17:42:03
投稿者: FANTA66

Excelでマニュアルで読込は可能なのですが・・。読込作業が適当にありまして出来れば自動化を検討中です。
また、テキストを改良するという事もあるのですが、システムを作成した会社が潰れてシステム内の修正が難しいという事もあります。

回答
投稿日時: 19/10/22 18:03:24
投稿者: 半平太

>Excelでマニュアルで読込は可能なのですが・・。
 
いえ、その手順をマクロの記録で録れば、
(若干の修正は必要かも知れませんが)
一件落着じゃないかと思うのですが。。
 
 
>以下はテキストファイルの一、二行目です。
 
そのデータでテストしたら、普通に処理されましたけど。
現象再現ができないと、ちょっと検証のしようがないですね。

投稿日時: 19/10/22 18:11:28
投稿者: FANTA66

いろいろとありがとうございます。仰る通り、Excelのマクロで録画してみます。
結果、ご報告いたします。

投稿日時: 19/10/22 18:24:33
投稿者: FANTA66

マクロを記録した結果、以下のようになりました。
 
ActiveWorkbook.Queries.Add Name:="001", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & " ソース = Csv.Document(File.Contents(""F:\テキストデータ\001.txt""),[Delimiter="","", Columns=11, Encoding=932, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " 昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " 変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数,{{""社員番号"", Int64.Type}, {""サブ番号"", Int64.Type}, {""氏名漢字"", type text}, {""郵便番号"", type text}, {""住所1" & _
        """, type text}, {""住所2"", type text}, {""住所3"", type text}, {""所属番号"", type text}, {""部内番号"", Int64.Type}, {""部署名"", type text}, {""グループ番号"", Int64.Type}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " 変更された型" & _
        ""
という感じです。いらない部分もありましたが、それぞれ読込のタイプを分けているようですので
参考にしながらマクロの製作を試みてみます。また、その下にもマクロ記録ではありましたが、
そこは理解できて必要か不必要化の理解ができて問題はないと思いました。
 
お忙しい中、ありがとうございました。

投稿日時: 19/10/22 18:25:45
投稿者: FANTA66

マクロで記録する。ということを忘れていました・・。(笑)
ありがとうございました。