Home » ExcelVBA Rangeオブジェクト » セル数式 » セル内改行には vbCrLf ではなく vbLf を使いましょう

セル内改行には vbCrLf ではなく vbLf を使いましょう

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「セル vbcrlf 挿入」
「vba セルへの文字入力 vbcrlf 折り返し」
という、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

Excel VBA(Visual Basic for Applications)からセル内改行を行うために、定数・vbCrLfを使おうとしているように見える、

セル内改行にはvbCrLfではなくvbLfを使いましょう

ちょっと残念な検索キーワードです。

[スポンサードリンク]

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を挿入した場合にも、セル内改行が行われてしまうところが、事態を複雑にしていると私は感じています。


Sub セル内改行を確認する()

 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)), """")"

End Sub

上記のマクロを実行すると、アクティブシートの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セルが、改行されているはずです。

セル内改行にはvbCrLfではなくvbLfを使いましょう

本来は定数・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行目の、どれと同じかをご確認ください。

セル内改行にはvbCrLfではなくvbLfを使いましょう

手入力した場合は、マクロ内でvbLfを使った1行目と同じ結果になっているはずです。Excelのセル内改行コードは、VBAからは定数・vbLfで入力できるLFだということです。

ですから、VBAからセル内改行を行うときはvbLfを使いましょう、vbCrLfではなく。

改行コードの削除処理でゴミが残る理由を調べていた方へ

Excelデータから改行コードLFを削除する処理を、何らかのプログラムから行ったのに、何故かゴミが残る原因を調べていてこのページに辿く方が、将来いらっしゃるだろうと予想しています。

貴方がそのようなケースに該当するなら、元のExcelデータがどうやって作られたものなのか、セル内改行にvbCrLfが使われたマクロなどで作られたExcelデータではないか、疑ってみることをおすすめします。

もしそうであったならば、LFを削除した結果CRが残ってしまっているはずですから、CRを削除する処理を追加で行えば、ゴミを消せるはずです。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル数式 » セル内改行には vbCrLf ではなく vbLf を使いましょう

TrackBack:0

TrackBack URL

Home » ExcelVBA Rangeオブジェクト » セル数式 » セル内改行には vbCrLf ではなく vbLf を使いましょう

「セル数式」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.