none
EXCEL2016でテキストファイル区切って読み込みできず RRS feed

  • 質問

  • テキストファイルを読み込むマクロを作成しました。

    Excel2010では指定文字で区切られ、いくつかのセルに分けられて読み込むのですが、

    Excel2016では、指定文字が区切られずに読み込んでしまいます。

    下記がそのマクロです。

    何がいけないのでしょうか。

    Sub Macro1()

        Workbooks.Open Filename:=Windows.Application.GetOpenFilename("ファイル,*.*,全て,*.*")
       
        Dim Open_File As String   '指定のファイル名

        Open_File = ActiveWorkbook.Name

        Workbooks.Open Filename:=Open_File
        Windows(Open_File).Activate

        Workbooks.OpenText Filename:=Open_File, _
            Origin:=1257, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlNone, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=True, Comma:= _
            False, Space:=True, Other:=True, OtherChar:="!", FieldInfo:=Array(Array _
            (1, 2), Array(2, 2), Array(3, 2)), TrailingMinusNumbers:=True

    End Sub

    2018年2月21日 4:02

回答

  • もともと、
    Workbooks.Open
    Workbooks.OpenText
    と二つ使われていてなんか奇妙なコードです。
    (Excel2010では一旦閉じて再度読み込みをしている ...ような感じ。)
    (Excel2016では同じファイル名の読み込みをスルーしている ...ような感じ。)
    それぞれでステップ実行をしてみればわかります。

    関係はないですが、Origin:=1257はたぶん間違いです。
    Code-Page-Identifiers(この表が使われるのかどうかわかりませんけど)
    https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx

    Sub Macro1()
        Dim Open_File As String   '指定のファイル名
        Open_File = Windows.Application.GetOpenFilename("ファイル,*.*,全て,*.*")
       
        Workbooks.OpenText Filename:=Open_File, _
             Origin:=1257, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
             xlNone, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=True, Comma:= _
             False, Space:=True, Other:=True, OtherChar:="!", FieldInfo:=Array(Array _
             (1, 2), Array(2, 2), Array(3, 2)), TrailingMinusNumbers:=True
    End Sub

    [訂正]2018-02-22 Thu. 14:22
    あ、Origin:=1257は間違いではないかも。
    • 編集済み ery srow 2018年2月22日 5:22
    • 回答としてマーク 晃一 2018年2月22日 9:31
    2018年2月22日 4:57

すべての返信

  • はっきりと原因はわかりませんが、指定文字とは「!」でしょうか? なおかつ、Semicolon:=True で良いのでしょうか?
    複数の区切り文字が指定されているように見えますが、全ての区切り文字が無視されるのでしょうか?

    また、マクロを使わず、Excelで直接読み込む場合は、うまく読み込めるのでしょうか?


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年2月21日 5:13
    モデレータ
  • 返信ありがとうございます。

    指定文字 ⇒ 「全て」です。

    A列に全てのテキストが読み込まれます。

    Semicolon:=True は True です。

    B列以降は空白です。

    エクセルで直接読み込む場合は問題なく読み込まれます。

    実は、エクセルで直接読み込む動作をマクロに記録してマクロを作りました。

    また、ファイル名に変数を使っていますが、変数を使わず、

    ファイル名を直に指定すれば区切って読み込込んでくれます。

     ① 変数指定時 ⇒ Workbooks.OpenText Filename:=Open_File, Origin:=1257・・・・・・

     ② 直指定時 ⇒ Workbooks.OpenText Filename:=FileA.xlsx, Origin:=1257・・・・・・

    ①はNGですが、②ではFileA.xlsxを区切って読み込みます。

    何か解決方法があれば、ご教示頂いたくお願い申し上げます。

    2018年2月21日 6:13
  • すみません。

    誤記しました。

     ② 直指定時 ⇒ Workbooks.OpenText Filename:=FileA.xlsx, Origin:=1257・・・・・・

    ①はNGですが、②ではFileA.xlsxを区切って読み込みます。

    誤:FileA.xlsx

    正:FileA.txt

    2018年2月21日 6:49
  • CSVの拡張子によっては区切り文字が無視されるのは仕様ですが、txtであれば無視されないと思うで②の結果は正しい動作だと思います。問題は①ですよね。①の時のOpen_Fileの中身はどうなっているのでしょうか? 考えにくいですが、微妙に空白が付いていたりとか・・・。
    いずれにしてもVBAで正しく読み込むパターンを実装できているわけですから、後はそことの違いをいろいろ検証していく方向でしょうか。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年2月21日 8:24
    モデレータ
  • 返信ありがとうございます。

    テキストファイルは下記のようになっています。

    抜粋です。

    $PACKAGES
    ! 220uF/35V; C1
    ! 0.1uF(B); C2
    ! 0.1uF(B); C3
    ! 0.1uF(B); C4
       ・
       ・
       ・
    $End

    この同じテキストファイル、同一マクロで結果が異なるので途方に暮れてます。

    かなりいろいろと検証をしたのですがどうしてもうまくいきません。

    これは「Excel2016の障害?」と思いたくなるほどです。

    何かヒントになりことでも構わないのでご教示頂ければ幸いです。

    画像は貼り付けられなくて見づらいですが、現在下記のような結果になっています。

               結果A                                      結果B

    Excel2016(ファイル名変数)         Excel2016(ファイル名固定)

                                                 Excel2010(ファイル名変数)  

            A列                        A列        B列           C列

    $PACKAGES                 $PACKAGES

    ! 220uF/35V; C1                                220uF/35V   C1

    ! 0.1uF(B); C2                                  0.1uF(B)     C2

    2018年2月21日 9:37
  • もともと、
    Workbooks.Open
    Workbooks.OpenText
    と二つ使われていてなんか奇妙なコードです。
    (Excel2010では一旦閉じて再度読み込みをしている ...ような感じ。)
    (Excel2016では同じファイル名の読み込みをスルーしている ...ような感じ。)
    それぞれでステップ実行をしてみればわかります。

    関係はないですが、Origin:=1257はたぶん間違いです。
    Code-Page-Identifiers(この表が使われるのかどうかわかりませんけど)
    https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx

    Sub Macro1()
        Dim Open_File As String   '指定のファイル名
        Open_File = Windows.Application.GetOpenFilename("ファイル,*.*,全て,*.*")
       
        Workbooks.OpenText Filename:=Open_File, _
             Origin:=1257, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
             xlNone, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=True, Comma:= _
             False, Space:=True, Other:=True, OtherChar:="!", FieldInfo:=Array(Array _
             (1, 2), Array(2, 2), Array(3, 2)), TrailingMinusNumbers:=True
    End Sub

    [訂正]2018-02-22 Thu. 14:22
    あ、Origin:=1257は間違いではないかも。
    • 編集済み ery srow 2018年2月22日 5:22
    • 回答としてマーク 晃一 2018年2月22日 9:31
    2018年2月22日 4:57
  • Excel 2016の環境が用意できたので試してみました。

    Windows(Open_File).Activate

    で、インデックスの範囲外でエラーになるのが原因のようです。
    どうやら仕様が変わったようですが、これまでもこのようなことはありました。
    とりあえず手元では、以下のようにすると動作しました。

    Application.Windows(Open_File).Activate


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年2月22日 5:32
    モデレータ
  • ery srowさん

    ご教示ありがとうございます。

    Excel2010/2016ともに希望通りの結果が得られました。
    コードも簡素化されてスッキリです。

    私が余計なコードをゴチャゴチャ記述して・・・
    自分の未熟さを痛感しています。

    本当にありがとうございました。

    2018年2月22日 9:34
  • trapemiyaさん

    ありがとうございました。
    ご指示いただいたコードを試したのですが、結果は2010:OK、2016:NGでした。
    trapemiyaさんには、今回いろいろとお付き合いいただきありがとうございました。

    2018年2月22日 9:35