• ベストアンサー

Chr(13) & Chr(10) vbCrLf

VBAの Chr(13) & Chr(10)は、vbCrLfと同じ意味でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

マクロ(VBA)上で使うのなら、同じ意味(改行コード)です。 ACCESSでの、受け渡し文字(置換・検索や数式で利用)としてだと VbCrLfは、只のテキストデータになるので、意味は異なります。 ちなみにEXCEL上では、Chr(10)だけで改行になるので 別のOffice製品へのデータの受け渡しでは注意が必要です。

trwnjengidn
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

こんにちは。 結果的には同じ文字列を返しますから「結果=意味」?という文脈なら「同じ意味」です。 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 ' ' ==================================

trwnjengidn
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

参考までに、田中亨先生のサイトの http://officetanaka.net/excel/vba/function/replace.htm の一部転載。 VBAでは改行コードに次のような定数が定義されています。 •16進の0D → vbCr •16進の0A → vbLf •16進の0D + 0A → vbCrLf テキストファイルなどで使われている、一般的な改行コードはvbCrLfですが、Excelのセル内改行では、vbLfが使われています。定数については、下記のページをご覧ください。 定数ってなに? Windowsで一般的に使われる改行コードは、16進の「0D 0A」という2文字です。VBAでは、この改行コードにvbCrLfという定数を割り当てています。ただし、Excelのセル内でAlt+Enterキーを押したとき挿入される改行コードは、「0D 0A」ではなく「0A」という1文字です。VBAでは、この「0A」にvbLfという定数が割り当てられています。セル内の改行コードに関しては、下記のページで詳しく解説しています。 セル内の改行コードに注意 以下を読まれては。

trwnjengidn
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.1

同じです。

trwnjengidn
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A