文字の変換はReplace関数を使う
文字の変換を行う関数にRelpace関数があります。改行文字もReplace関数を使って変換することが可能です。
VBAでは改行文字用の定数が用意されています。
改行文字 | 定数 |
---|---|
CR | vbCr |
LF | vbLf |
CRLF | vbCrLf |
OS標準の改行コード | vbNewLine |
vbNewLineはWindowsの場合はvbCrLfと同じで、Macの場合はvbCrと同じです。
MaxOSXはUnix系なので本来はvbLfが正しいのではないかと思うのですがCR扱いになります。OS9時代の旧MacはCRが改行コードだったためその名残でしょうけど中途半端な気がしますね。そのため個人的にはvbNewLineは信用ならないため利用しないようにしています。
改行文字の変換のコードは単純で、以下のような感じになります。
1 2 3 4 |
'// LF→CRLF Function LfToCrlf(a_sSrc As String) As String LfToCrlf = Replace(a_sSrc, vbLf, vbCrLf) End Function |
引数に渡された文字列に含まれるLF文字をReplace関数を使ってCRLFに変換しています。
改行同士間の変換関数
改行同士間で変換する関数は全部で6種類あります。残りの5種類も上のLFをCRLFに変換する関数と同様に実現できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
'// LF→CR Function LfToCr(a_sSrc As String) As String LfToCr = Replace(a_sSrc, vbLf, vbCr) End Function '// CR→CRLF Function CrToCrlf(a_sSrc As String) As String CrToCrlf = Replace(a_sSrc, vbCr, vbCrLf) End Function '// CR→LF Function CrToLf(a_sSrc As String) As String CrToLf = Replace(a_sSrc, vbCr, vbLf) End Function '// CRLF→CR Function CrlfToCr(a_sSrc As String) As String CrlfToCr = Replace(a_sSrc, vbCrLf, vbCr) End Function '// CRLF→LF Function CrlfToLf(a_sSrc As String) As String CrlfToLf = Replace(a_sSrc, vbCrLf, vbLf) End Function |
使い方
上の関数の使い方は引数にString型の文字列を渡して、戻り値としてString型の処理結果を受けとります。
ここでは「”1″ + LF + “2” + CR + “3” + CRLF + “4”」の文字列を使ってLFをCRLFに変換してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub LfToCrlfTest() Dim s As String Dim ret As String Dim i Dim c As String s = "1" & vbLf & "2" & vbCr & "3" & vbCrLf & "4" ret = LfToCrlf(s) Debug.Print "変換前" For i = 0 To Len(s) - 1 c = Mid(s, i + 1, 1) Debug.Print Asc(c) Next Debug.Print "変換後" For i = 0 To Len(ret) - 1 c = Mid(ret, i + 1, 1) Debug.Print Asc(c) Next End Sub |
実行すると変換前と変換後の文字列のASCIIコード値を出力します。
出力結果は以下です。実際は縦に並べて出力されますが分かりやすいように横に並べてみます。
変換前 | 変換後 |
49 | 49 |
10 → LF | 13 → CR |
10 → LF | |
50 | 50 |
13 → CR | 13 → CR |
51 | 51 |
13 → CR | 13 → CR |
10 → LF | 13 → CR |
10 → LF | |
52 | 52 |
このように、LFがCRLFに変換されていることが分かります。また、CRLFのLFもCRLFに変換されているため、CR+CR+LFになっています。
一応補足ですが、CRとLFはそれぞれ1バイトですが、CRLFはCRとLFを並んでいる状態のことを指すため2バイトになります。
そのため、LFからCRLFに変換すると変換後の文字列のサイズはCRが増えた分だけ増加することになります。