SEのネタ帳

発見したことや気付いた内容を書き留めたり、作った便利ツールなどを置いておく場所。主に仕事関係のことを書きます。

【VBA】Word、Excelの改行コードについて

VBAで文字列比較のコード書いてて、Wordの改行コードで少しハマった。

 if str = "なんちゃらかんちゃら" then

がヒットしない。ウォッチしてみても、strにはちゃんと正しい文字は入っている。

VBAは文字列比較が「=演算子」で出来るはず。

(ちなみにC言語では無理。まぁ無理で当たり前なのだけど、新人さんはその理由をちゃんと理解しとこう。)

 

とりあえず、文字列比較関数を使って比較してみることに。

 if Strcomp(str, "なんちゃらかんちゃら") = 0 then

ヒットしない。ファッキン。

「・・・なるほど。改行コードやな。そんな初歩のトラップにひっかかるかいな♪」

 

VBAのウォッチ式には改行が表示されなかったが、文字列の最後にはついてるはず。

てことで、Windowsの改行コードであるCRLFをくっつけて再度比較。

 if Strcomp(str, "なんちゃらかんちゃら" & vbCrLf) = 0 then

ヒットしない。・・・小僧!!

少しイラっとしたので、デバッグ形態に変身することに。

 

「とりあえず困ったらダンプすべし!」が僕のスタイルなので、strをダンプしてみることに。

 (前半部分は省略) 0x0D

え?最後CR(0x0D)だけ?LF(0x0A)いらんの?

どうやらWordの改行コードはCRのみらしい。

 

WindowsはCRLFなんだし、Microsoftさんの製品同士やのに統一してくれよ(-_-メ)

ちなみにExcelはLFのみである。。なんで全部バラバラなん!!

 

ということで改行コードについてまとめると以下の通り。

 ・Wordは「CR」

 ・Excelは「LF」

VBAで文字列を扱う場合は要注意。

 

PS.

Wordの文字列の最後に表示される改行アイコンが「直角に曲がった矢印」だったので、CRLFであることを疑わなかったというのもある。

というのも、Sakuraエディタで表示される改行アイコンは、種類によって見た目が異なる。これは何気に便利な機能なのである。

 CRLF : 直角に曲がった矢印

 CRのみ: ←

 LFのみ : ↓

どっかの団体がこの辺を規定してくれるとええなぁ。