社内SEの徒然なる日記

ExcelVBA(マクロ)で改行コードを削除

■ VBAでCSV

Excelのマクロ(というかVBA)でCSVファイルの出力処理を作る時には、改行コードとかを除去するのが正道です。まぁ、要件によっては除去してはダメなこともあるかもですが。

ってことで除去しようと思ったのですが、方法を忘れしました。最近、ソースを触る仕事をしてなかったからなぁ。

■ テストデータ

こんなデータを作ります。
VBAの改行コード削除1

CSVファイルを作るコードを書いて出力します。ファイル出力を作るのが面倒だったので、今回はイミディエイトウィンドウに吐いています。

Sub aaa()

Dim myCSV As String

myCSV = myCSV & Range("A1")
myCSV = myCSV & ","
myCSV = myCSV & Range("A2")
myCSV = myCSV & ","
myCSV = myCSV & Range("A3")

Debug.Print myCSV

End Sub


改行コードが含まれているので、イミディエイトウィンドウにはこのように出力されます。
VBAの改行コード削除2

■ Replace関数

やり方は色々とあると思いますが、Replace関数を使うのが手軽だと思います。

Replaceを使って、改行コードをスペースに置き換えます。Replace関数は、第一引数が元の値、第二引数が変換前の値、第三引数が変換後の値です。

Sub aaa()

Dim myCSV As String

myCSV = myCSV & Replace(Range("A1"), vbLf, "")
myCSV = myCSV & ","
myCSV = myCSV & Range("A2")
myCSV = myCSV & ","
myCSV = myCSV & Range("A3")

Debug.Print myCSV

End Sub


これを実行すると、イミディエイトウィンドウにはこのように出力されました。
VBAの改行コード削除3

OKですね。

■ 補足

上のサンプルでは、変換する値を「vbLf」として指定していますが、別の方法で指定する事も出来ます。というか、もう少し工夫した方が良いと思います。

そもそも、WIndowsのテキストファイルの改行コードは、キャリッジリターン(vbCr)とラインフィード(vbLf)との組み合わせ(vbCrLf)で表される筈です。そういう意味だと、Excelのセル内改行がラインフィード(vbLf)のみになっているのはUnix系のOSとの互換性とかを考えたのかも知れないですね(Unixの改行コードはラインフィードのみ)。

今回はラインフィードを除去する仕組みにしたのですが、このような事情を考えるとキャリッジリターン(vbCr)も除去するようにした方が安全だと思います。

さらに、実際にはタブとかの特殊文字を除去する事も考えられます。そうなると、Replace関数をいくつも連ねる必要があってソースが美しくなりません。いっその事、特殊文字(改行コードを含む)を除去する関数を自作した方が手っ取り早いかもしれません。

■ 後書き

vbLf、vbCrと書いてきましたが、実際に私が作る時はChr関数を使って指定しています。vbCr が Chr(13) で、vbLf が Chr(10) ですね。

何故かというと、ただの趣味で深い意味はありません。

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する