「セル vbcrlf 挿入」
「vba セルへの文字入力 vbcrlf 折り返し」
という、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
Excel VBA(Visual Basic for Applications)からセル内改行を行うために、定数・vbCrLfを使おうとしているように見える、
ちょっと残念な検索キーワードです。
Excelのセル内改行コードはCR+LFではなくLFです
これらの検索をなさった方にはまず
「セル内改行は vbCrLf ではなく vbLf を使いましょう」
と、お伝えしておきます。
Windows環境で使われる改行コードは一般的には、CR(Carriage Return)+LF(Line Feed)なのですが、Excelのセル内改行コードはLF(Line Feed)です。ASCIIコードの10進数なら「10」(16進数なら「0A」)がExcelの改行コードです。
VBAからセル内改行を行うには、LFを表す定数・vbLfを使いましょう。CR+LFを表すvbCrLfではありません。
改行コードの確認を行うサンプルマクロ
VBAから、定数・vbCrLfを挿入した場合にも、セル内改行が行われてしまうところが、事態を複雑にしていると私は感じています。
Range("A1").Value = "a" & vbLf & "b"
Range("A2").Value = "a" & vbCr & "b"
Range("A3").Value = "a" & vbCrLf & "b"
Range("B1:E4").Formula = _
"=IFERROR(CODE(MID($A1, COLUMN()-1, 1)), """")"
上記のマクロを実行すると、アクティブシートのA1:A3セルに、アルファベットの「a」と「b」の間に、vbLf・vbCr・vbCrLfがそれぞれ挿入された文字列が入力されます。
Range("A1").Value = "a" & vbLf & "b"
Range("A2").Value = "a" & vbCr & "b"
Range("A3").Value = "a" & vbCrLf & "b"
B1:E4セルには、A列に入力されている各文字列のASCIIコードを表示する、
「=IFERROR(CODE(MID($A1, COLUMN()-1, 1)), "")」
といった数式が、
Range("B1:E4").Formula = _
"=IFERROR(CODE(MID($A1, COLUMN()-1, 1)), """")"
というオブジェクト式によって入力されます。
vbLfを使ったA1セルと、vbCrLfを使ったA3セルが、改行されているはずです。
本来は定数・vbLfで挿入できるLFがEacelのセル内での改行コードですが、定数・vbCrLfを使った場合にはCRとLFが入力され、結局LFが含まれているために、改行されてしまうのです。
サンプルマクロの実行結果と手入力した場合を比較する
マクロで入力された「=IFERROR(CODE(MID($A1, COLUMN()-1, 1)), "")」という数式によって、B1:B3セルに「a」のASCIIコード「97」、D1:D2セルとE3セルに「b」のASCIIコード「98」が表示され、C1:C3セルとD3セルに改行コードのASCIIコード「10」(LF)や「13」(CR)が表示されています。
これらの数値の意味を確認したら、A4セルに、「a」、[Alt]+[Enter]による改行、「b」を手入力してください。先のマクロではB4:E4セルにも数式を入れていますから、入力された文字列のASCIIコードが自動的に表示されます。
そのB4:D4セルに表示されているASCIIコードが、マクロで入力した1行目から3行目の、どれと同じかをご確認ください。
手入力した場合は、マクロ内でvbLfを使った1行目と同じ結果になっているはずです。Excelのセル内改行コードは、VBAからは定数・vbLfで入力できるLFだということです。
ですから、VBAからセル内改行を行うときはvbLfを使いましょう、vbCrLfではなく。
改行コードの削除処理でゴミが残る理由を調べていた方へ
Excelデータから改行コードLFを削除する処理を、何らかのプログラムから行ったのに、何故かゴミが残る原因を調べていてこのページに辿く方が、将来いらっしゃるだろうと予想しています。
貴方がそのようなケースに該当するなら、元のExcelデータがどうやって作られたものなのか、セル内改行にvbCrLfが使われたマクロなどで作られたExcelデータではないか、疑ってみることをおすすめします。
もしそうであったならば、LFを削除した結果CRが残ってしまっているはずですから、CRを削除する処理を追加で行えば、ゴミを消せるはずです。
最終更新日時:2019-10-21 12:49
Home » Excel VBA Rangeオブジェクト » セル数式 » セル内改行には vbCrLf ではなく vbLf を使いましょう