Excelのこととか色々

Excel のこととか楽天とか いろいろ書いてみます・・・

【Excel/VBAのこと41】改行コード(Chr(10), Chr(13), vbCr, vbLf, vbCrLf)

   f:id:tuna-kichi:20200223230814p:plain

 

**********************************************

 

開発チームから、「Excel に不正な改行コードを使用しているセルがある」と、

連絡がありました。

どうしてそのようなコードが混入したのかは不明でしたが、

その部分は手動で修正して再提出しました。

 

改行コードの種類

そこで、Excel の改行コードについてちょっと調べてみました。

改行に関係するコードは以下の5種類あるようです。

  • Chr(10)
  • Chr(13)
  • vbCr
  • vbLf
  • vbCrLf

それぞれ、マクロに組み込んで実行してみるとこんな結果に。

  改行コード実行結果

マクロはこれ。

3文字目と4文字目の間に改行コードを挿入して実行。

**********************************************
Sub 改行コードtest()

 Range("c2") = Left(Range("b2"), 3) & Chr(10) & Mid(Range("b2"), 4)
 Range("c3") = Left(Range("b2"), 3) & Chr(13) & Mid(Range("b2"), 4)
 Range("c4") = Left(Range("b2"), 3) & vbCr & Mid(Range("b2"), 4)
 Range("c5") = Left(Range("b2"), 3) & vbLf & Mid(Range("b2"), 4)
 Range("c6") = Left(Range("b2"), 3) & vbCrLf & Mid(Range("b2"), 4)
End Sub

**********************************************

「改行」という形になったものは、Chr(10), vbLf, vbCrLf の3種類。

Chr(13) と vbCr は変化なし・・・ なぜ???

そこで、以前作った、セルの中身を見ることができる(全部ではありませんが・・・)

マクロで覗いてみると・・・

 

 改行コードが見える

 

ラベルには改行で表示されています。

テキストボックスにも改行を表す記号が表示されています。

だけど、シート上では改行されていないように見えます。

 

うーん・・・

コードは入力されたけど、2行にするコードではない ということだろうか・・・

 

Chr(13) と vbCr は同じ機能で、

Chr(10) と vbLf が同じ。

vbCrLf は両方の機能を持っている というところでしょうか。

違いは1行のままか2行で表示するか かな。

 

Cr ・・・Carriage Return 
Lf ・・・Linefeed

意味や詳しい機能は調べてもよくわかりませんでしたが、

改行で表示したいときは、vbCrLf を使っておけば両方カバーできるってことで。

-----

 

 

-----

改行コードを削除するマクロ

私の作業の中で、改行を解除して1行にしたいことがあるので、

ワンクリックで改行コードを削除するマクロを 作りました。

**********************************************

Sub 改行コード削除()
 Selection.Replace What:="" & Chr(10) & "", Replacement:=""
 Selection.Replace What:="" & Chr(13) & "", Replacement:=""
 Selection.Replace What:="" & vbCr & "", Replacement:=""
 Selection.Replace What:="" & vbLf & "", Replacement:=""
 Selection.Replace What:="" & vbCrLf & "", Replacement:=""

End Sub

**********************************************

5種類全部を削除してしまえば、どの改行コードでも対応できます。

でも、この並びの場合、上の2行で全部削除してしまうようです。

それと、このマクロは複数セルを選択して実行しても、

改行コードのあるすべてのセルに適用されます。

 

欧米の言語で、各行の末尾のスペースを削除して改行している場合は、

改行コードを削除した後に単語がくっついてしまうので、

Replacement:="" ではなく、

Replacement:=" " と、半角スペースに置換した方が良いです。

  単語がつながってしまう

 

上のマクロのコードには引数がもっとありますが、

最低限必要な引数だけ記述しています。

この方が読みやすいので。

 

あとは、いつも通りこのマクロをリボンに登録して、

いつでも、どんなファイルにでも使えるようにしておきます。

 

 

 

 

**********************************************

 

個人用マクロブックについてはこちら

リボンに登録についてはこちら

www.tuna-kichi.com

_/_/_/_/_/_/_/_/_/_/