【VBA】Word、Excelの改行コードについて
VBAで文字列比較のコード書いてて、Wordの改行コードで少しハマった。
if str = "なんちゃらかんちゃら" then
がヒットしない。ウォッチしてみても、strにはちゃんと正しい文字は入っている。
(ちなみに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のみ : ↓
どっかの団体がこの辺を規定してくれるとええなぁ。