• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel : OpenTextメソッドが正常に動作しないのはなぜ?)

ExcelのOpenTextメソッドの問題と解決方法

このQ&Aのポイント
  • ExcelのOpenTextメソッドが正常に動作しない原因とは?
  • マクロで使用するOpenTextメソッドの問題を解決する方法は?
  • OpenTextメソッドの動作を改善するための手順を教えてください

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>つまり、引数を省いたとしても、Wendy02さんの >コードと同じ動きをするはずなのではないでしょうか? >ただ、実際には省いたことにより問題が生じましたので、 >引数は必ず明記すると認識を改めた方がよいのでしょうか? これは、失敗した人だけが分かることかもしれませんね。 デフォルトで、省略すればよいはずだ、というのは、私も知っております。ヘルプでも省略可能となっていますね。今回は、マクロは、同じブックで行っているのでやむをえないのですが、仮に新規でも、この部分は、誤動作しやすいのです。 Excelのワークシート側のメソッドには、癖の悪いものや、現行のVBAとは違う匂いのするものがいくつかあります。同類のQueryTable も同じです。ものすごく便利なのですが、本来、VBAのネイティブと整合性が悪いのでは、と疑ってしまいます。ここらは、Version によって、オプションが違うことがありますが、それを除いた最低限の部分は、省略できません。 だから、#2の最後に私が触れたのは、OpenTextや、QueryTable は、簡単でものすごく便利なのですが、私は、使うのにためらいがあります。出来るだけ他の方法を考えたりします。本来は、Office VBAのネイティブで済ませるのが、良いと個人的には思っています。

booooob
質問者

お礼

ヘルプに書かれていることは間違いないと思い込んでいたので、問題の原因が全くわからず、ほぼ一日泥沼にはまっておりました。 引数の省略で誤動作しやすいことが分かり、 もやもやしていた頭が一気にクリアになりました。 とても有益な情報をお教えいただき、誠に、誠にありがとうございました!

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>本来であれば、テキストの内容には変化が全くないはずだと思います。 >どのようにすればOpenTextメソッドは希望する動作をしてくれるのでしょうか? 何をしようとしているのか、コードだけでは、本来の目的が分かりません。 ただ、コードだけを見ると、もしかしたら、元のコードは、記録マクロで取っていませんか? OpenTextメソッドで TextQualifier の部分を抜いても、本来、デフォルトでは、入るようになっていますが、わざわざ、設定を変えいたりすると、問題のような状態になると思います。 Sub sampleRevised() Dim FileName As String FileName = ThisWorkbook.Path & "\test.txt" Workbooks.OpenText FileName:= _     FileName, _     StartRow:=1, _     DataType:=xlDelimited, _     TextQualifier:=xlDoubleQuote, _     ConsecutiveDelimiter:=False, _     Comma:=True Application.DisplayAlerts = False  ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlCSV Application.DisplayAlerts = True  ActiveWorkbook.Close False      End Sub 本来の目的、"" (Quatation Marks)を取るためでしたら、私は、上記のようなコードは書きませんが、一応、元のコードを直したら、以上のようになるように思います。

booooob
質問者

お礼

DataType:=xlDelimited を追加しましたら、 正常に動作するようになりました。 ありがとうございました。 私はコードが見やすいように、 省略可能な引数はすべて省いていました。 省いた場合の設定は、DataType は xlDelimited となると認識しています。 つまり、引数を省いたとしても、Wendy02さんの コードと同じ動きをするはずなのではないでしょうか? ただ、実際には省いたことにより問題が生じましたので、 引数は必ず明記すると認識を改めた方がよいのでしょうか?

  • salf
  • ベストアンサー率42% (27/64)
回答No.1

質問の意味がよくわからないのですが、「,」で区切られたくないのですか? それとも「"」の数が増えているのが問題なのですか? 「,」で区切られたくないというのであれば、[Comma=:True]を[Comma:=Faluse]へ変更すれば区切られなくなります。

booooob
質問者

補足

ご回答ありがとうございます。 「,」では区切られたいです。 問題となっているのは、下記のようにテキストの内容が変化してしまっていることです。 "あ"," あ "  ↓ """あ"",""",あ,"""" つまり、「"」と「,」の数は増えて欲しくありません。 特に、カンマの数が増えてしまうと、あとでデータベースに取り込む際に、 希望する形でデータが取り込まれません。 質問で提示したマクロは、実際にそのまま使用するものではなく、 問題点を分かりやすくするために簡略化したものです。 実際に使用する際には、OpenTextメソッドでテキストを開いた際に、 列ごとに別々の文字置換処理を施します。

関連するQ&A