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

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

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

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

Q&A

解決済

2回答

8439閲覧

VBAでBOMなしUTF8ファイル出力

MK-3108

総合スコア6

VBA

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

0グッド

0クリップ

投稿2021/07/13 07:57

編集2021/07/13 08:25

BOMなしUTF8のファイルを出力したいです。「パラメータが間違っています」とエラーがでます。解決策を教えてください。

オブジェクト作るところからのコードです。
※スマホで質問しているため、一部誤字や文字化けしている可能性があります

VBA

1 2With CreateObject ("ADODB.Stream") 3 4 .Charset = "UTF-8" 5 .LineSeparator = adLF 6 7 .Open 8 9 ‘中身 10 11 For i1 = 3 To WkEndRow 12 For i2 = To WkEndColumn 13 14 If i2 = WkEndColumn Then 15 16 WkParam Area = WkParam Area & vbTab & Cells (i1, i2).value & vbLf 17 18 ElseIf i2= 1 Then 19 20 WkParam Area=WkParamArea & Cells (i1, i2).value 21 22 Else 23 24 WkParamArea = WkParamArea & vbTab & Cells(i1, i2).value 25 26 End If 27 28 Next i2 29 Next i1 30 31 32 33 ‘bom削除 34 .Position = 0 35 .Type= adTypeBinary 36 .Position = 3 37 38 Dim byteData() As Byte 39 byteData = .Read 40 41 .Close 42 43 .Open 44 .Write byteData 45 46 ‘ファイル出力 47 .WriteText WkParamArea 48 .SaveToFile outFp, 2 49 50 .Close 51

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

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

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

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

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

jinoji

2021/07/13 08:10

outFileCharSet とは何ですか
MK-3108

2021/07/13 08:11

UTF8 のことです
jinoji

2021/07/13 08:14

もし "UTF8" となっているなら、 "UTF-8" が正しいと思います。
MK-3108

2021/07/13 08:15

はい、UTF-8となってます
jinoji

2021/07/13 08:26

ADODB.Stream の 参照設定はしていますか?
MK-3108

2021/07/13 08:27

しています!
guest

回答2

0

もとのコードは見てませんが、これでBOMなしutf-8が書き出せます。

VBA

1Sub WriteNonBomText() 2 Const adTypeBinary = 1 ' バイナリ 3 Const adTypeText = 2 ' テキスト 4 Const adWriteChar = 0 ' 改行なし 5 Const adSaveCreateOverWrite = 2 ' ある場合は上書き 6 Const charset = "utf-8" 7 8 ' BOMありで書き込み内容作成 9 Set sw = CreateObject("ADODB.Stream") 10 sw.Type = adTypeText 11 sw.charset = charset 12 Call sw.Open 13 Call sw.WriteText("ほげほげ", adWriteChar) 14 15 ' BOMなしのバイト配列を得る 16 sw.Position = 0 'ストリームの位置を0にする 17 sw.Type = adTypeBinary 'データの種類をバイナリデータに変更 18 sw.Position = 3 'ストリームの位置を3にする 19 Dim byteData() As Byte '一時格納用 20 byteData = sw.Read 'ストリームの内容を一時格納用変数に保存 21 sw.Close '一旦ストリームを閉じる(リセット) 22 23 ' BOMなしの書き込み 24 sw.Open 25 sw.Write byteData 'ストリームに一時格納したデータを流し込む 26 Call sw.SaveToFile("c:\temp\hoge.txt", adSaveCreateOverWrite) 27 Call sw.Close 28 29End Sub

投稿2021/07/13 08:49

ku__ra__ge

総合スコア4524

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

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

0

ベストアンサー

したいことは大体こんな順番じゃないですか。

VBA

1.WriteText WkParamArea 2.Position = 0 3.Type= adTypeBinary 4.Position = 3 5byteData = .Read 6.Close 7.Open 8.Write byteData 9.SaveToFile outFp, 2 10.Close

投稿2021/07/13 08:40

jinoji

総合スコア4585

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問