dポイントプレゼントキャンペーン実施中!

下記のようなマクロを作りました。

Sub sample()
FileName = ThisWorkbook.Path & "\test.txt"
Workbooks.OpenText FileName:=FileName, Comma:=True
ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlCSV
ActiveWorkbook.Close
End Sub

test.txt には次のテキストが書かれています。

"あ"," あ "

上記のマクロを実行すると、テキストの中身は次のようになってしまいます。

"""あ"",""",あ,""""

本来であれば、テキストの内容には変化が全くないはずだと思います。
原因が不明なのですが、マクロの動作確認をしたところ、
OpenTextメソッドでテキストを開いたときにすでに、
カンマの位置で区切られてセル内に入っていませんでした。

どのようにすればOpenTextメソッドは希望する動作をしてくれるのでしょうか?

A 回答 (3件)

>つまり、引数を省いたとしても、Wendy02さんの


>コードと同じ動きをするはずなのではないでしょうか?

>ただ、実際には省いたことにより問題が生じましたので、
>引数は必ず明記すると認識を改めた方がよいのでしょうか?

これは、失敗した人だけが分かることかもしれませんね。
デフォルトで、省略すればよいはずだ、というのは、私も知っております。ヘルプでも省略可能となっていますね。今回は、マクロは、同じブックで行っているのでやむをえないのですが、仮に新規でも、この部分は、誤動作しやすいのです。

Excelのワークシート側のメソッドには、癖の悪いものや、現行のVBAとは違う匂いのするものがいくつかあります。同類のQueryTable も同じです。ものすごく便利なのですが、本来、VBAのネイティブと整合性が悪いのでは、と疑ってしまいます。ここらは、Version によって、オプションが違うことがありますが、それを除いた最低限の部分は、省略できません。

だから、#2の最後に私が触れたのは、OpenTextや、QueryTable は、簡単でものすごく便利なのですが、私は、使うのにためらいがあります。出来るだけ他の方法を考えたりします。本来は、Office VBAのネイティブで済ませるのが、良いと個人的には思っています。
    • good
    • 0
この回答へのお礼

ヘルプに書かれていることは間違いないと思い込んでいたので、問題の原因が全くわからず、ほぼ一日泥沼にはまっておりました。

引数の省略で誤動作しやすいことが分かり、
もやもやしていた頭が一気にクリアになりました。

とても有益な情報をお教えいただき、誠に、誠にありがとうございました!

お礼日時:2006/07/15 09:24

>本来であれば、テキストの内容には変化が全くないはずだと思います。


>どのようにすれば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)を取るためでしたら、私は、上記のようなコードは書きませんが、一応、元のコードを直したら、以上のようになるように思います。
    • good
    • 0
この回答へのお礼

DataType:=xlDelimited を追加しましたら、
正常に動作するようになりました。
ありがとうございました。

私はコードが見やすいように、
省略可能な引数はすべて省いていました。
省いた場合の設定は、DataType は xlDelimited となると認識しています。
つまり、引数を省いたとしても、Wendy02さんの
コードと同じ動きをするはずなのではないでしょうか?

ただ、実際には省いたことにより問題が生じましたので、
引数は必ず明記すると認識を改めた方がよいのでしょうか?

お礼日時:2006/07/14 10:26

質問の意味がよくわからないのですが、「,」で区切られたくないのですか?


それとも「"」の数が増えているのが問題なのですか?

「,」で区切られたくないというのであれば、[Comma=:True]を[Comma:=Faluse]へ変更すれば区切られなくなります。

この回答への補足

ご回答ありがとうございます。
「,」では区切られたいです。

問題となっているのは、下記のようにテキストの内容が変化してしまっていることです。

"あ"," あ "
 ↓
"""あ"",""",あ,""""

つまり、「"」と「,」の数は増えて欲しくありません。
特に、カンマの数が増えてしまうと、あとでデータベースに取り込む際に、
希望する形でデータが取り込まれません。

質問で提示したマクロは、実際にそのまま使用するものではなく、
問題点を分かりやすくするために簡略化したものです。

実際に使用する際には、OpenTextメソッドでテキストを開いた際に、
列ごとに別々の文字置換処理を施します。

補足日時:2006/07/13 17:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!