• ベストアンサー

Chr(13) & Chr(10) vbCrLf

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

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答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/17068)
回答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% (7995/17088)
回答No.1

同じです。

trwnjengidn
質問者

お礼

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

関連するQ&A

  • VBA Chr(10) Chr(13)

    アクセスのテーブルの値をvbaで操作してるのですが Chr(10) + Chr(13) と Chr(10) & Chr(13) は、同じ意味と認識していいのでしょうか? これを実行して置換等をした場合、改行される時とされない時があり不思議に感じています。 フォームに紐づいたレコードソースをテキストボックスに表示させていて、改行させて表示させたい場合があります。

  • Chr(13)とChr(10)の違いは?

    myStr = Replace(myStr, Chr(13), "") や myStr = Replace(myStr, Chr(10), "") で、改行を置換しているのですが、どちらかでも改行できる時や どちらかじゃないと改行できない時があります。 そもそもChr(13)とChr(10)の違いはなんでしょう? どちらも改行ですよね? 何が違うのでしょう?

  • Chr関数のラインフィールド文字って?

    EXCEL2000のVBAを勉強しているものです。 Chr関数のラインフィールド文字ってどんなことが できるのでしょうか?調べると「復帰」とかかれているのですが・・ 実際に使ってみても何がどう変わっているのかがわかりません。 chr(10) とすると、どうなるのでしょうか?教えてください。 よろしくお願いいたします。

  • アクセス 改行 Chr(10)とChr(13)

    アクセスのフォームの、Enter キー入力時動作を「フィールドに行を追加」にして、 改行できる状態にした時、エンターキー改行したら、 入力される文字はChr(10)とChr(13)のどちらになるのでしょうか?

  • Chr(255)の呼称?

    多分、Chr(255)は無手順の送受信などでデータの終端などを示していたようにも思います。 30数年も昔のことでかなり記憶が曖昧です。 ところで、VB 2008でもファイル終端を示すものとして使われているようです。 そこで、Chr(255)に通り名があるのかどうかを質問します。

  • Chr(10)とCHAR(10)は同じ意味ですか?

    セルに直接 ="a" & CHAR(10) &"b" と入力するのと、 Sub a() ActiveCell.Value = "a" & Chr(10) & "b" End Sub とするのでは、同じ意味ですか?

  • chrにする関数・数値を求めるには?

    Sub aaa() Debug.Print Chr(65) End Sub で、Aが返ってきますが、 AをChr()で表すとどのような数値になるかはどうすれば求められますか? Sub aaa() Debug.Print Chr("A") End Sub のような感じで、数値の65を返したいです。

  • 改行について

    VBAでコードを作るにおいて 改行が必要な場合、 Sub 改行() MsgBox "1行目" & Chr(10) & "2行目" MsgBox "1行目" & Chr(13) & "2行目" MsgBox "1行目" & Chr(13) + Chr(10) & "2行目" MsgBox "1行目" & vbCr & "2行目" MsgBox "1行目" & vbLf & "2行目" MsgBox "1行目" & vbCrLf & "2行目" MsgBox "1行目" & vbNewLine & "2行目" End Sub どれを使うべきなのでしょうか? 理由も教えてください。

  • EXCEL VBAにて、WORDへ置換

    EXCEL VBAにて、WORD文書への文字列置換を行っております。 文字列の置換自体はできています。 が、 置換文字列に「改行」(vbCRやvbLF)をいれて置換すると、 word側での表示が□になってしまいます。 vbCrだけでもvbLFだけでも、vbCRLFでも□と表示されてしまいました。 chr(13) & chr(10)でも□になりました。 EXCEL VBA にて WORDへ文字列置換する場合に送る、改行コード (たぶん「^p」と予測をつけているのですが)を chr関数等での 表示方法を教えてください。 EXCEL2003 WORD2003 よろしくお願いします。

  • エクセルVBAのChr(10)の挿入と削除

    宜しくおねがいします 現在結合されたセルがありそのセル内に他のプログラムから 下記の値が挿入されるようになっています。 あいうえお かきくけこ さしすせそ たちつてと (Chr(10)の改行) (Chr(10)の改行) (Chr(10)の改行) (Chr(10)の改行) 他のプログラムから送られてくる値は”あ行”の1行だけだったり ”ま行”までの7行あったりとその都度変わってきます。 文字数も”あ”の1文字だけだったり”あああいいいうううえええおおお”と 文字数も変わります。 しかし下の4行分の”Chr(10)の改行”の数は変わりません。 やりたいことは↓ コマンドボタンを二つ作り、ボタンを押すたびに下にあるChr(10)の改行を 挿入したり削除したりしたいのですがどのようにすればよいのでしょうか? 追加ボタンを2回押すとChr(10)の改行が6行分になり そこから削除ボタンを3回押すとChr(10)の改行が3行分になる・・・という感じです。 試しにマクロの記録で セルを選択して改行を削除 をしてみたのですが思うような動きをしてくれません。 なぜChr(10)なのかとかいうのは聞かないでください・・・ そこから説明すると長くなるので。

専門家に質問してみよう