2014年12月06日

VBAのString関数でハマった : String(1,vbNewLine ) で何を得られる?

Office TANAKA - Excel VBA関数[String関数]
構文
String(num,character)
引数numには、文字をいくつ並べるかを指定します。
引数characterには、並べる文字を示す文字コード、または文字を指定します。

解説
引数characterで指定した文字コードに該当する文字、または引数characterで指定した文字列の先頭文字を、引数numで指定した回数並べた文字列を返します。


解説のとおりなんですが、

String(3,"あ" )
-> あああ

じゃあ
String(3, vbNewline ) は?
vbNewline & vbNewline & vbNewline と等価な文字列(改行3つ)が得られますか?
いいえ、答えは
vbCr & vbCr & vbCr と等価な文字列です。

これも解説のとおりなんですが
vbNewline の実体は vbCrLfに 等価です。 (日本語環境の一般的なWindowsでは)。
これはさらに vbCr & vbLf と等価です。

ここまで分解すると説明のとおり、 vbCr & vbLf という2つの文字をつなげた文字列の先頭文字を3回繰り返したものが得られたというわけです。

以下の事実は、知っていても忘れてしまうのでメモ(VBA環境)
LEN("A") = 1
LENB("A") = 2 // 1じゃないかって? VBAは UNICODEですからこれが正解
LEN("あ") = 1
LENB("あ") = 2
LEN(vbNewline) = 2
LENB(vbNewline) = 4

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/106190845
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

・おすすめ楽天ショップ1:trendyimpact楽天市場店
・おすすめサプリショップ:iHerb.com
・おすすめ楽天ショップ2:上海問屋
Powered by さくらのブログ