.NET開発者のためのブログメディア
VBAの改行コードとは?ExcelVBAのセル内改行コード|ExcelVBAサンプルプログラム
- SE
- VBAとExcelの改行コードはどこが違うのですか。
- PM
- 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
|
- SE
- WordVBAマクロでも改行コードはExcelVBAマクロと同じ扱いなのですね。
- PM
- そのとおりです。ただ、VBAを用いる場合にはExcelのセル内改行はLFのみとし、その他は特に理由がない限りCR+LFに統一した方が良いです。
改行コードの扱い方
以上、VBAの改行コードについて述べてきました。
ExcelやWordでは、いずれの改行コードでも適当なタイミングで適切な改行コードに変換されますので、他のアプリケーションで読み込ませるなどする時だけ、そのアプリケーションで扱える改行コードに変換してファイルを出力してやれば良いということになります。
ただし、適切に変換されるからといってむやみに改行コードを換えて記述するのは良くありません。VBAを用いる場合にはExcelのセル内改行はLFのみとし、その他は特に理由がない限りCR+LFに統一した方が良いでしょう。
Search キーワード検索
Popular 人気の記事
-
.NET Framework 3.5をWindows10にインストールする方法
2019年10月24日 -
EdgeとChromeはどう違う?それぞれのスペック7つを比較解説!
2020年09月28日 -
【VB.NET入門】DataGridViewの使い方まとめ
2019年12月22日 -
VB.NETをおすすめする3つの理由とは?VBAとの違いや勉強方法を解説
2019年12月21日 -
Windows10のテキストエディタおすすめ20選!選ぶポイント3つ
2020年04月28日
reccomended おすすめ記事
-
C#のusingステートメントでリソースの解放【Disposeとの違いとは】
2020年03月17日 -
【SQL Serverログの操作】トランザクションログの使用量を確認する方法
2020年03月16日 -
【.NETが統合】.NET 5の概要と今後のリリース予定
2020年03月05日
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
ソフトを用いた3DCGアート/東京都千代田区/【WEB面談可】/テレワーク
月給50万~50万円東京都千代田区(秋葉原駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)