Excel VBAのvbNewLineはReplaceでは置換できないので注意

vbNewLineとは

vbNewLineはWindowsとMacの両方で使用できる改行のための定数。

昔はWindowsおよびMacの定数は以下のように別れていたが、現在は共通して使用可能な定数が用意されている。

定数OS
vbCrLfChr(13) + Chr(10)Windows
vbCrChr(13)Mac
vbNewLineChr(13) + Chr(10) or Char(13)Windows or Mac

そのためセルに文字列と改行を入れたい場合はvbNewLineを使用すればWindowsとMacのどちらのMicrosoft Excelを使用しても改行が挿入される。

 Sub test()
   Range("A1") = "foo" & vbNewLine & "bar"
 End Sub
vbNewLineを使用した例

vbNewLineはReplaceでは使用できない

便利な定数だがReplaceで置換することはできないので注意が必要

例えば先ほどの改行入りのfoo barの改行をbrタグに置換したい場合はReplaceを使用することになるが、vbNewLineを"<br>"に置換するよう指定してもWindowsだと置換されない。

WindowsとMacで置換内容を変える関数

この問題はWindowsとMacで置換する改行コードを出し分ける関数を作成して利用すれば解決できる。

やり方は「If Application.OperatingSystem Like "*Windows*"」でOSがWindowsか判定して、WindowsならvbLf、それ以外ならvbNewLineにする。

ここのWindowsの改行の定数はvbCrLfではなくvbLfを使用する

Function lineBreak() As String
  If Application.OperatingSystem Like "*Windows*" Then
    lineBreak = vbLf
  Else
    lineBreak = vbNewLine
  End If
End Function

Sub test2()
  Dim val As String
  val = Range("A1")
  Range("B2") = Replace(val, lineBreak, "<br>")
End Sub

上記のコードであればセルから取得した改行入りの値をReplaceで置換してもWindowとMacのどちらでも正しく置換できるようになります。

カテゴリーvba