こんにちは。
結果的には同じ文字列を返しますから「結果=意味」?という文脈なら「同じ意味」です。
vbCrLf は VBA.Constants クラスの組込み定数ですから、
これを「同じ結果」を返すからといって、
態々Chr() 関数で表現して、余計なコストを掛ける必要性はないです。
Chr() 関数を用いるのは、あくまでも動的に変化させたい時に限定される
という覚え方でいいように思います。
ただ、Web上や書籍などで目にする、VBAのサンプルコードについては、
他の言語で書かれたものから派生している場合などの事情も多くあり、
Chr() 関数で書かれたものも少なからずあります。
これらを読んで理解できることは、必要なことです。
どっちを使うべきか、という議論を始めれば終りが無いような気もしますが、
、、、少なくとも、VBAで_VBAを_自分で書く_時には、
VBAの組込み定数を優先させておけば間違いないです。
直接の回答は以上です。以下、ご参考まで。
場合によっては、モジュールスコープの変数や定数に格納しておいたものを
優先させて使うこともあります。
因みに、似て非なるものとして、Chr() 関数、Chr$() 関数があります。
定数や変数よりも関数の方がある程度処理が遅いのは必然ですし、
& 演算子による文字列連結に掛かるコストも小さくないですが、、
どの程度処理時間が違うのか、計時テストしてみました。
Chr()関数
Chr$()関数
組込み定数 vbCrLf
module定数
module変数
固定長文字列型変数の中身を書き換える (not格納・置換)処理を
cn回数分ループしたものを計時して、
結果をイミディエイトウィンドウに表示します。
速ければいい、というものではありませんが、
同じか?と問われれば、違いを知って貰いたいと思うものなので、、、。
でもまぁ、、、余興みたいなものではあります。
昔、自分でテストしたことがあって、
Chr()>Chr$()>組込み定数>module定数>module変数
という結論に達しましたが、これを根拠に使う使わない、
というものではありません。、
現実にはすべてを使い分けて書いています。
以下、参考程度のテストコードです。
' ' ==================================
' ' === 宣言部 ===モジュール先頭
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
#Else
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
#End If
Private myCRLF As String, myCR As String
Private Const CRLF = vbCrLf, CR = vbCrLf
' ' ==================================
Sub try8985316w2CrLf()
Dim s As String * 2 ' CrLf 書換え用 固定長文字列型変数
Dim t1 As Long, t2 As Long ' GetTime
Dim i As Long, cn As Long ' カウンタ/試行回数
myCRLF = vbCrLf
cn = 10000000
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = Chr(13) & Chr(10)
Next i
t2 = timeGetTime
Debug.Print "CrLf◆Chr()関数 *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = Chr$(13) & Chr$(10)
Next i
t2 = timeGetTime
Debug.Print "CrLf◆Chr$()関数 *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = vbCrLf
Next i
t2 = timeGetTime
Debug.Print "CrLf◆組込み定数 vbCrLf *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = CRLF
Next i
t2 = timeGetTime
Debug.Print "CrLf◆module定数 CRLF *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = myCRLF
Next i
t2 = timeGetTime
Debug.Print "CrLf◆module変数 myCrLf *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
End Sub
' ' ==================================
Sub try8985316w1Cr()
Dim s As String * 1 ' Cr 書換え用 固定長文字列型変数
Dim t1 As Long, t2 As Long ' GetTime
Dim i As Long, cn As Long ' カウンタ/試行回数
myCR = vbCr
cn = 10000000
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = Chr(13)
Next i
t2 = timeGetTime
Debug.Print "Cr◆Chr()関数 *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = Chr$(13)
Next i
t2 = timeGetTime
Debug.Print "Cr◆Chr$()関数 *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = vbCr
Next i
t2 = timeGetTime
Debug.Print "Cr◆組込み定数 vbCr *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = CR
Next i
t2 = timeGetTime
Debug.Print "Cr◆module定数 CR *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
t1 = timeGetTime
For i = 1 To cn
Mid(s, 1) = myCR
Next i
t2 = timeGetTime
Debug.Print "Cr◆module変数 myCr *"; cn; s, t2 - t1; "milli-Sec"
' ' -------------------------
End Sub
' ' ==================================
お礼
ありがとうございました。