VB.NET初心者です
変数に必要なデータを入れて、それをCSVに書き込もうとしているのですが、
データの中にカンマを含むものが存在して、
エクセルで開くと本来1セルでよいところが、2セル使って
他の行と比べるとずれてしまいます
たとえば、A~Eを変数として
A=あ
B=い,い
C=う
D=え
E=お
というデータがあって、それをA,B,C,D,Eの順に
横一列でCSVにした場合
「あ い,い う え お」
と5列にしたいところが、
「あ い い う え お」
と6列になってしまうのです。
これはどのように解決すればよいでしょうか?
どうかご教授願います。
[開発環境]
WinXPPRO/VB.NET2003/Excel2000
No.5ベストアンサー
- 回答日時:
確かに・・・
strCsvData = """A"""
strCsvData += ","
strCsvData += """B"""
strCsvData += ","
strCsvData += """C"""
strCsvData += ","
strCsvData += """D"""
stbCsvData += ","
stbCsvData += """E"""
だと "A","B","C","D","E" となりますね。
何故か・・・それは A~E を変数として記述してないからです。
わかりやすく言うと "" でくくった A は文字列として認識されます。
変数として利用したい場合は A を変数として使ってあげる必要があるのです。
strCsvData = """
strCsvData += A
strCsvData += """
strCsvData += ","
strCsvData += """
strCsvData += B
strCsvData += """
strCsvData += ","
strCsvData += """
strCsvData += C
strCsvData += """
strCsvData += ","
strCsvData += """
strCsvData += D
strCsvData += """
stbCsvData += ","
stbCsvData += """
strCsvData += E
strCsvData += """
このようにすれば A~E を変数として使ってあげることになります。
いくら A~E を変数として宣言しても "A" と A は違う物です。
"A" は文字列「A」、A は変数「A」です。
---------------------------------------------------------------
わかりにくい場合のテストコード
Dim strTest As String
Dim strData As String
'「文字列」を変数に格納
strTest = "文字列"
'(1) strDataには「文字列」が格納される
strData = strTest
'(2) strDataには「strTest」が格納される
strData = "strTest"
'(1)では strTest を変数として利用、(2)では strTest という文字列として利用
デバッグしてみて下さい。
この回答への補足
詳しいコードありがとうございます。
上記のものを環境に合わせてテストしてみたのですが、
どうやらstrCsvData = """の部分が
strCsvData = """"になってしまう(要するに、”が1つ補正されて増えてしまう)ためか、やはりうまく動きませんでした。
解決するにはどのようにしたらよいでしょうか?
"A"とAの区別はつきます。
No.6
- 回答日時:
CSVは
A項目データを""で囲まない方式
B項目データを""で囲む方式
が昔からあり、数字項目と文字列項目で扱いを異にしている方式もある。
数値も文字列もB
数値はA、文字列はB
数値も文字列もA
この第1か第2かを採用し、そうすると文字列は""で囲まれるから
中にカンマを入れることが出来て、セパレータのカンマと区別できる。
あくまで完成品のCSVファイルをその後利用するソフトの目安がついているだろうから、そのソフトの機能(扱いが出来るか)によるので勝手に作らないように。
No.4
- 回答日時:
詳しくは知りませんが、
FileSystem.WriteLineであれば、文字列には自動的に""が付加されるので","が含まれていても大丈夫ではないでしょうか。
FileSystem.PrintLineやSystem.IO.StreamWriterでは""は付加されないと思いますので自分で""を書き込む必要があるはずです。
[参考]
FileSystem.WriteLine メソッド
http://msdn.microsoft.com/ja-jp/library/microsof …
No.3
- 回答日時:
CSVはカンマ区切りなので、既にカンマが含まれているのをそのまま書き込むと、2つのデータとしてしまいます。
カンマを含むデータを、1つとしたい場合、「"」(ダブルクォーテーション)で囲んで下さい。
この場合、
B="い,い"
とします。
No.2
- 回答日時:
カンマも文字列として判定したいということですね。
その場合は " (ダブルコーテーション)で文字列を囲んであげれば可能です。
strCsvData = """あ"""
strCsvData += ","
strCsvData += """い,い"""
strCsvData += ","
strCsvData += """う"""
strCsvData += ","
strCsvData += """え"""
stbCsvData += ","
stbCsvData += """お"""
完成した文字列は
"あ","い,い","う","え","お"
となります。
あとはCSV形式で開く際に引用符を指定してあげれば希望通りの結果が得られると思います。
この回答への補足
私もダブルクォーテーションで囲むのはやってみました。
しかしみなさんおっしゃられるように書込みたい値を直接使うならOKなのですが、
例えば#2さんのように
strCsvData = """あ"""
strCsvData += ","
strCsvData += """い,い"""
strCsvData += ","
strCsvData += """う"""
strCsvData += ","
strCsvData += """え"""
stbCsvData += ","
stbCsvData += """お"""
は、できます
しかし値は変数A~Eに入っているので、
strCsvData = """A"""
strCsvData += ","
strCsvData += """B"""
strCsvData += ","
strCsvData += """C"""
strCsvData += ","
strCsvData += """D"""
stbCsvData += ","
stbCsvData += """E"""
だと変数が文字列扱いになって
結果が
A B C D E
になってしまうのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Excel(エクセル) Excelについて教えてください。 帳票データがあります。 アクセスに取り込むため、 データ形式にし 1 2022/06/08 19:59
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
データにカンマが入ったCSVデータのread方法
Visual Basic(VBA)
-
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
各項目がダブルクォーテーションで囲まれたカンマ区切りのCSVを作る方法?
Excel(エクセル)
-
-
4
カンマ区切りの数字をCSVファイルにインポートする時どうすれば?
Excel(エクセル)
-
5
カンマがデータとして入ってるCSVについて
Oracle
-
6
EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込も
Excel(エクセル)
-
7
VBAでCSVをExcelに取り込む時に、途中の改行を取り除くには
Visual Basic(VBA)
-
8
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
Excelで指数表現しないようにす...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
エクセル 数値データを桁をそ...
-
MS SQLServer のSQLで文字列の...
-
Left関数とRight関数を合わせた...
-
C#で年月を比較する
-
NULLの定義について
-
UNIX:縦一列のファイルを横一行...
-
テキストエディタで複数行にわ...
-
変数内に入った文字列の結合 UWSC
-
【Excel VBA】複数ある特定の文...
-
CStringの文字列検索&抜き出し...
-
エクセルでセル内の文字列の最...
-
VBの「As String * 128」とは?
-
Excelで3E8を3.00E+8にしない方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
【Excel VBA】複数ある特定の文...
-
MS SQLServer のSQLで文字列の...
-
アクセスで特定の数字以外(複...
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
変数内に入った文字列の結合 UWSC
-
エクセル 数値データを桁をそ...
おすすめ情報