質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

4440閲覧

VBAでダブルコーテーションで囲んだ文字列をcsv出力するとエスケープコードまで出てしまう

tf-nagai

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2021/06/29 14:10

編集2021/06/30 00:07

前提・実現したいこと

 VBAでcsvの情報を変更するコードを書いています。
最終的にダブルコーテーションで囲まれた文字列のcsvを書き出したい

発生している問題・エラーメッセージ

xlsmではダブルコーテーション1つで囲まれていますが、CSVをテキストエディタで確認するとエスケープコードまで含んだ3つのダブルコーテーションになってしまいます。

 *  出力したいCSV文字列  "1"
*  現状のCSV文字列   """1"""

イメージ説明

該当のソースコード

VBA

1Sub test() 2 Dim i As Long 3 For i = 2 To 4 4 Cells(i, 1) = Chr(34) & Cells(i, 1) & Chr(34) 5 Next 6End Sub 7

出力したい結果

テキストエディタやメモ帳で開いた時にダブルコーテーションが1つになっている状態
イメージ説明

 変数かループによるセル指定をダブルコーテーションで囲む出力方法についてご教示頂けると幸いです。

初心者なので質問自体がわかりずらい点があるかと思います。ご容赦ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neconekocat

2021/06/29 22:30

値が「"1"」ならCSVで「"""1"""」と出力するのは正常だと思うんですが。 どういう出力を望んでいましたか?
tf-nagai

2021/06/30 00:08

ありがとうございます。出力したい結果として、テキストエディタやメモ帳で開いた時にダブルコーテーションが1つになっている状態にしたいです。 質問内容に画像を追記させて頂きました。
neconekocat

2021/06/30 00:16

それが目的であればExcel上で「"1"」となっているセルを「1」にすれば解決すると思いますが。
tf-nagai

2021/06/30 00:20

ありがとうございます。そうするとダブルコーテーションのないcsvになってしまうのです。。
neconekocat

2021/06/30 00:40

そういった特殊な出力(A列の2行目以降のフィールドのみくくる?)をしたいなら自力で出力処理を書くしかないですね。CSVとしては何の意味もないですけど。
tf-nagai

2021/06/30 00:45

わかりました。ありがとうございます。
guest

回答2

0

マクロの記録を使って、商品ID["12"]と入力してみてください。
そしてマクロの記録をみてください
ActiveCell.FormulaR1C1 = """12"""
ダブルコーテーションは3つ付きます
詳しくはネットで検索してみてください
参考まで
http://officetanaka.net/excel/vba/tips/tips90.htm

投稿2021/07/07 11:22

syousuke.33

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

戯れに作ったもので、ちゃんとテストしてないですが、せっかくなので置いときます。

VBA

1Sub test_makeCSV() 2 Debug.Print makeCSV(ActiveSheet) 3End Sub 4 5Function makeCSV(ws As Worksheet) 6 makeCSV = WorksheetFunction.TextJoin(Split(WorksheetFunction.Rept(", ", ws.UsedRange.Columns.Count - 1) & vbLf), False, ws.UsedRange) 7End Function 8

<追記>
元のセル値に関わらず全てのセルをダブルクォーテーションで括るのがお望みだったでしょうか。
考えてみましたが今一つスッキリと書けませんでした。

VBA

1Function makeCSV(ws As Worksheet) 2 Const wxw = """*""", x = "*" 3 With ws.UsedRange 4 Dim r, c, i, j, t 5 r = .Rows.Count: c = .Columns.Count 6 ReDim arr(1 To r, 1 To c) 7 For i = 1 To r: For j = 1 To c 8 t = .Cells(i, j).Text 9 arr(i, j) = IIf(t Like wxw, t, Replace(wxw, x, t)) 10 Next j, i 11 makeCSV = WorksheetFunction.TextJoin(Split(WorksheetFunction.Rept(", ", c - 1) & vbLf), False, arr) 12 End With 13End Function

投稿2021/07/01 15:11

編集2021/07/05 02:06
jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tf-nagai

2021/07/05 01:03

ありがとうございます。 確かにこれで行けそうな気がしたので、動かしてみましたが期待する結果ではありませんでした。 折角作って頂いたのに申し訳ありません。 なんか私の期待している応えそのものがズレてるような気がしてきました。 メモ帳で開いた時に「ダブルコーテーションがない」あるいは「ダブルコーテーションが3つになる」という現象自体こちらの問題な気がしてきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問