和風スパゲティのレシピ

日本語でコーディングするExcelVBA

値を文字列(String型)に変換する - CStr関数

数値などの値を文字列型に変換する、CStr関数の使い方を解説します。

基本形

CStr(変換したい値)

実行例

CStr(123) ' = "123"
CStr(True) ' = "True"
CStr(#2025/5/18#) ' = "2025/5/18"
CStr(1/3) ' = "0.333333333333333"

解説

CStr関数は数値や日付などの他のデータ型を文字列型に変換する関数です。
たとえば、数値の 123 を渡すと "123" という文字列として返されます。

また、日付型の値やTrue/Falseといったブール値も、
それぞれ "2025/5/18" や "True" のように文字列として扱えるようになります。


この関数は帯に短したすきに長し的な関数で、
あまり使う機会はないかもしれません。

というのもVBAは暗黙の型変換を行ってくれる言語のため、
文字列を必要とする関数に数値や日付を渡せば自動で文字列に変換してくれます。

MsgBox 数値変数 ' ← 自動で文字列に変換して表示してくれる
文字列変数 = 123 & 456 ' ← 「&」演算子を使うと文字列として結合してくれる

↑このように、別に文字列に変換しなくても文字列として扱うことができます。


また、日付型などを文字列として使用したいときは、
Format関数で書式を指定してあげた方が確実です。

MsgBox CStr(Date変数) ' ← システム表示設定によって違う結果になる
MsgBox Format(Date変数, "yyyy/mm/dd") ' ← 2025/05/18 の形式で確実に返る

 

ただString型が欲しいときは何もしなくても勝手になってくれますし、
表示形式を調整する必要があるならFormat関数で正確に指定した方が良いため、
CStr関数さんの出番は滅多にないような気がしますね。


ということであまり使い道がないCStr関数さんですが、
Stringをはっきり明示しないとエラーになる場面でたまに使用します。


例えばLen関数は「数値型を渡すと使用メモリ数を返す」という罠があるため、

数値の桁数 = Len(Long変数)

↑このコードは「常に4(4バイト)を返す」という悲しい結果になります。

10000なら5、10なら2のように桁数をカウントしたいときは、
以下のようにCStr関数で文字列型に変換してから文字数をカウントして下さい。

数値の桁数 = Len(CStr(Long変数))

 

同じような罠として、「同じ文字を繰り返す文字列を作成するString関数」は、
数値を渡すと空文字を返してしまう性質があります。

数値に対して使用する場合は、以下ようにCStr関数をかませて対応してください。

Long変数 = 7
Msgbox String(3, Long変数) ' ← ""が返ります。
Msgbox String(3, CStr(Long変数)) ' 777が返ります

 

他には、ByRefで定義されたString型の引数にLong変数を渡す際、

Call Stringを受け取るSubプロシージャ(Long変数) ' 「型が一致しません」エラー
Call Stringを受け取るSubプロシージャ(CStr(Long変数)) ' ← OK

このような使い方をすることも稀にあります。
※ ByRefは暗黙の型変換が行われません。


ただこの使い方をする場合でも、

Call Stringを受け取るSubプロシージャ((Long変数))

このように()で変数をくくるだけで値として関数に渡すことができ、
暗黙の型変換によって文字列にすることもできます。


いずれの場合も変数ではなく値が渡りますので、
ByRefによる変数の書き換えは元のLong変数に反映しませんのでご注意ください。


ということであまり使う機会のないCStr関数さんですが、
String型でないといけない場面に遭遇したら使ってあげて下さい。