下記のようなマクロを作りました。
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メソッドは希望する動作をしてくれるのでしょうか?
No.3ベストアンサー
- 回答日時:
>つまり、引数を省いたとしても、Wendy02さんの
>コードと同じ動きをするはずなのではないでしょうか?
>ただ、実際には省いたことにより問題が生じましたので、
>引数は必ず明記すると認識を改めた方がよいのでしょうか?
これは、失敗した人だけが分かることかもしれませんね。
デフォルトで、省略すればよいはずだ、というのは、私も知っております。ヘルプでも省略可能となっていますね。今回は、マクロは、同じブックで行っているのでやむをえないのですが、仮に新規でも、この部分は、誤動作しやすいのです。
Excelのワークシート側のメソッドには、癖の悪いものや、現行のVBAとは違う匂いのするものがいくつかあります。同類のQueryTable も同じです。ものすごく便利なのですが、本来、VBAのネイティブと整合性が悪いのでは、と疑ってしまいます。ここらは、Version によって、オプションが違うことがありますが、それを除いた最低限の部分は、省略できません。
だから、#2の最後に私が触れたのは、OpenTextや、QueryTable は、簡単でものすごく便利なのですが、私は、使うのにためらいがあります。出来るだけ他の方法を考えたりします。本来は、Office VBAのネイティブで済ませるのが、良いと個人的には思っています。
ヘルプに書かれていることは間違いないと思い込んでいたので、問題の原因が全くわからず、ほぼ一日泥沼にはまっておりました。
引数の省略で誤動作しやすいことが分かり、
もやもやしていた頭が一気にクリアになりました。
とても有益な情報をお教えいただき、誠に、誠にありがとうございました!
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)を取るためでしたら、私は、上記のようなコードは書きませんが、一応、元のコードを直したら、以上のようになるように思います。
DataType:=xlDelimited を追加しましたら、
正常に動作するようになりました。
ありがとうございました。
私はコードが見やすいように、
省略可能な引数はすべて省いていました。
省いた場合の設定は、DataType は xlDelimited となると認識しています。
つまり、引数を省いたとしても、Wendy02さんの
コードと同じ動きをするはずなのではないでしょうか?
ただ、実際には省いたことにより問題が生じましたので、
引数は必ず明記すると認識を改めた方がよいのでしょうか?
No.1
- 回答日時:
質問の意味がよくわからないのですが、「,」で区切られたくないのですか?
それとも「"」の数が増えているのが問題なのですか?
「,」で区切られたくないというのであれば、[Comma=:True]を[Comma:=Faluse]へ変更すれば区切られなくなります。
この回答への補足
ご回答ありがとうございます。
「,」では区切られたいです。
問題となっているのは、下記のようにテキストの内容が変化してしまっていることです。
"あ"," あ "
↓
"""あ"",""",あ,""""
つまり、「"」と「,」の数は増えて欲しくありません。
特に、カンマの数が増えてしまうと、あとでデータベースに取り込む際に、
希望する形でデータが取り込まれません。
質問で提示したマクロは、実際にそのまま使用するものではなく、
問題点を分かりやすくするために簡略化したものです。
実際に使用する際には、OpenTextメソッドでテキストを開いた際に、
列ごとに別々の文字置換処理を施します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/04 14:20
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/04 12:47
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルVBA 3 2022/06/23 20:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
onClickで関数呼出し後に、結果...
-
Labelコントロールに数字を代入...
-
Refreshメソッドの使い方
-
VBPをダブルクリックするとたま...
-
javascriptからjavaを呼び出したい
-
mainメソッドのthrows節で設定...
-
JSPで<SELECT>の中にDBから持っ...
-
final修飾子を使っているのに、...
-
VB.netで、シリアル通信のタイ...
-
オートシェイプの位置がずれる...
-
【sendkeysメソッドが動かずに...
-
エクセルのvbaによる書式のコピ...
-
配列のメソッド
-
VB.NET/256色でのBMPファイル保存
-
メソッドをstaticにする、しな...
-
C#で右からnカラム目に文字を挿...
-
Application.Wait の参照設定
-
アクセスVBA 時間を止める
-
エラーの意味を
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
Labelコントロールに数字を代入...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
JSPで<SELECT>の中にDBから持っ...
-
Refreshメソッドの使い方
-
コマンドプロンプト実行後に画...
-
エクセルVBAにおけるON TIMEメ...
-
boolean型のフィールドとゲッタ...
-
javascriptからjavaを呼び出したい
-
VBPをダブルクリックするとたま...
-
配列のメソッド
-
【sendkeysメソッドが動かずに...
-
Excel VBA でExcelを終了したい...
-
VB.netで、シリアル通信のタイ...
-
worksheets & rows メソッドは...
-
Application.Wait の参照設定
-
(String args[])というメッソ...
おすすめ情報