VBAの改行コードとは?ExcelVBAのセル内改行コード|ExcelVBAサンプルプログラム

- システム
エンジニア - VBAとExcelの改行コードはどこが違うのですか。
- プロジェクト
マネージャー - VBAの改行コードは基本的にはCR+LFが用いられますが、Excelのセル内改行コードはLFのみが使われます。
VBAの改行コードとは?
VBAとはVisual Basic for Applicationsの略でExcelなどのMicrosoft Officeのアプリケーションで利用できるプログラミング言語の1つです。Visual BasicはGUIに対応した言語で、それをExcelやWordなどのアプリケーションでも操作できるように機能拡張した言語がVBAです。
改行コードとは改行を表す文字コードのことを指します。WindowsではCR+LF、MacintoshではCR、Linux(UNIX)ではLFが多く使用されています。
CRはキャリッジリターンのことで10進数で表すと13、16進数で表すと0Dです。LFはラインフィードのことで10進数で表すと10、16進数で表すと0Aとなります。これらは制御コードと呼ばれる文字コードです。
VBAの改行コードはWindowsのCR+LFが基本です。ただし、Excelのセル内改行のように特殊な場合だけLFを用いることもあります。
文字コードとは?
コンピュータは数値しか認識できません。そのため文字を認識させるために文字ひとつひとつに対して特定の数値を割り当てました。これが文字コードです。
文字コードにはいくつか種類がありますが、7ビットの文字コードのひとつにASCIIコードというものがあります。ASCIIコードは日本のパソコンでは多く使われていました。現在のパソコンで使われているUNICODEにもASCIIコードと同等の文字セットが含まれています。
ExcelVBAのセル内改行コード
Excelでセル内改行するにはAlt+Enterキーを押します。このとき入力される文字コードはvbLf(LF)です。
以下にExcelVBAマクロのサンプルプログラムとしてA1セルに入力した文字列の文字コードを表示するプログラムをご紹介します。A1セルにAlt+Enterキーを押して改行コードを入力し、0A(LF)が表示されるのをご確認ください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
'
' 文字コード確認サンプルプログラム
' A1セルに任意の文字列を入力すると、その文字コードを表示します。
'
Sub Sample1()
Dim strTxt As String, strPrn As String, strOne As String
Dim i As Long
strTxt = Range("A1").Text 'セルA1の文字列を取得
For i = 1 To Len(strTxt)
strOne = Hex(Asc(Mid(strTxt, i, 1))) '1文字をASCIIコードに変換し、更に16進数に変換
If (Len(strOne) = 1) Then _
strOne = "0" & strOne '変換した16進数が1桁のときは前に"0"を付けて2桁にする
strOne = strOne & " " ' 空白文字を追加
strPrn = strPrn & strOne
Next i
MsgBox strPrn
End Sub
|
Excelの改行コード1
Excelでは基本的にCR+LFを改行コードとして扱っているようですが、CRのみやLFのみでも改行コードとして受け付けてくれます。
実際に以下のサンプルプログラム(Sample2~Sample4)を実行してcsvファイルを作成し、Excelで開いてみてください。
ファイルをダブルクリックしてExcelに読み込ませると、ほぼ期待通りに表示されるでしょう(CRのみの改行コードのときは読み込んだだけでは正しく表示されませんでしたが、セルをダブルクリックすると正しく改行されました)。
どういうことかと申しますと、適当なタイミング(ファイル読み込み、コピー&ペースト、ダブルクリックなど)でExcel内部の改行コードが適切に置換されているということだと言えます。
ただ1点、注意すべきところがあります。Excelでのセル内改行はLFのみとしないとVBAで処理する際に不具合が出ることがあるようです。
ExcelVBAサンプルプログラム
以下のサンプルプログラム(Sample2~Sample4)はA1セルに入力されている文字列の改行コードを換えてcsvファイルとして出力するものです。なお、出力されたファイルの内容を正確にご確認頂くにはバイナリファイルエディタを用いるとよいでしょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
'
' A1セルの内容をそのまま C:\Sample2.csvに出力する
'
Sub Sample2()
Open "C:\VBAtest\Sample2.csv" For Output As #1
Print #1, Chr(34) & Range("A1") & Chr(34)
Close #1
End Sub
'
' A1セルの内容を(改行コードLFをCR+LFに換えて)C:\VBAtest\Sample3.csvに出力する
'
Sub Sample3()
Open "C:\VBAtest\Sample3.csv" For Output As #1
Print #1, Chr(34) & Replace(Range("A1"), vbLf, vbCrLf) & Chr(34)
Close #1
End Sub
'
' A1セルの内容を(改行コードLFをCRに換えて)C:\VBAtest\Sample4.csvに出力する
'
Sub Sample4()
Open "C:\VBAtest\Sample4.csv" For Output As #1
Print #1, Chr(34) & Replace(Range("A1"), vbLf, vbCr) & Chr(34)
Close #1
End Sub
|
Excelの改行コード2
Excelの改行コードをVBAマクロから直接セルに入力してどうなるかを検証してみます。
以下のサンプルプログラム(Sample5)はA2~A5セルに異なる改行コードを入れた文字列を出力しています。結果は、ほぼ期待通りに改行されます(CRのときだけダブルクリックしないと改行されません)。
1
2
3
4
5
6
7
8
9
|
'
' 改行コードテスト(A2~A5セルに改行コードを換えて出力)
'
Sub Sample5()
Range("A2") = "改行1" & vbCr & "vbCrです。"
Range("A3") = "改行2" & vbLf & "vbLfです。"
Range("A4") = "改行3" & vbCrLf & "vbCrLfです。"
Range("A5") = "改行4" & vbNewLine & "newLineです。"
End Sub
|
WordVBAでの改行コード
WordVBAマクロでも改行コードはExcelVBAマクロと同じ扱いです。ファイル読み込み時に改行コードがCR+LF以外(CRのみ、またはLFのみ)のテキストファイルのときでも適切に変換されて読み込まれます。
サンプルプログラム(Sample2~Sample4)を実行して、改行コードを換えたファイルを実際にWordで読み込んでみるとご理解頂けるでしょう。
WordVBAサンプルプログラム
以下のサンプルプログラム(SampleW1~SampleW4)は、それぞれテキストに埋め込む改行コードを換えているVBAマクロですが、いずれも同じ結果になることが確認できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
'
' WordVBAマクロ サンプルプログラム1
' 普通に改行します。
'
Sub SampleW1()
With Selection
.TypeText Text:="ABC"
.TypeParagraph
.TypeText Text:="DEF"
.TypeParagraph
.TypeText Text:="GHI"
.TypeParagraph
End With
End Sub
'
' WordVBAマクロ サンプルプログラム2
' CR+LFで改行します。
'
Sub SampleW2()
Selection.TypeText _
Text:="ABC" & vbCrLf & _
"DEF" & vbCrLf & _
"GHI" & vbCrLf
End Sub
'
' WordVBAマクロ サンプルプログラム3
' CRで改行します。
'
Sub SampleW3()
Selection.TypeText _
Text:="ABC" & vbCr & _
"DEF" & vbCr & _
"GHI" & vbCr
End Sub
'
' WordVBAマクロ サンプルプログラム4
' LFで改行します。
'
Sub SampleW4()
Selection.TypeText _
Text:="ABC" & vbLf & _
"DEF" & vbLf & _
"GHI" & vbLf
End Sub
|
- システム
エンジニア - WordVBAマクロでも改行コードはExcelVBAマクロと同じ扱いなのですね。
- プロジェクト
マネージャー - そのとおりです。ただ、VBAを用いる場合にはExcelのセル内改行はLFのみとし、その他は特に理由がない限りCR+LFに統一した方が良いです。
改行コードの扱い方
以上、VBAの改行コードについて述べてきました。
ExcelやWordでは、いずれの改行コードでも適当なタイミングで適切な改行コードに変換されますので、他のアプリケーションで読み込ませるなどする時だけ、そのアプリケーションで扱える改行コードに変換してファイルを出力してやれば良いということになります。
ただし、適切に変換されるからといってむやみに改行コードを換えて記述するのは良くありません。VBAを用いる場合にはExcelのセル内改行はLFのみとし、その他は特に理由がない限りCR+LFに統一した方が良いでしょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)