Excelのマクロを学習する中で、他の人が作ったVBAコードを見ると、
「CStr」という単語を見かけることも多いかと思います。
- 「CStr」っていったい何なの?
- 「CStr」を使ってできることを知りたい
- 「CStr」の使い方や書き方を知っておきたい
このような考えに至ったのではないでしょうか。
この記事を読むことで、下記のことがわかります。
- VBAの「CStr」について学べる
- 「CStr」の使い方・書き方を学べる
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
VBA(Excelマクロ)のCStr関数とは?
「CStr」は、数値や日付などの値を文字列(String型)に変換する関数です。
VBAでは、変数や値に「型」という概念があります。
(数値なら「Integer型」、文字列なら「String型」など)
この「型」というのが非常に厄介で、基本的に違う型の変数や値を一緒に扱うことはできません。
例えば、「A」という文字が入ったString型の変数と、「100」という数値が入ったInteger型の変数とをつなげて「A100」にしようすると、「型が一致しません」というエラーが発生します。
そこで「CStr関数」の出番です。
「CStr関数」は、Integer型の変数に入った「100」をString型に変換することができます。
それぞれの変数の型が一致するため、「A100」という連結を実現させることができるわけです。
「Cstr関数」の概要がわかったところで、使い方・書き方を見ていきましょう。
CStr関数の使い方
前提知識:マクロの基礎・作成から実行まで
前提知識:変数や宣言
前提知識:Debug.Printの表示方法
下記のVBAコードを見てください。
Sub 型変換()
Dim str As String
Dim num As Integer
str = "A"
num = 100
Debug.Print str + CStr(num)
End Sub
6行目で「CStr」が登場しています。
使い方は簡単で、CStr()の引数に型変換したい変数や値を指定するだけです。
【引数とは?】
引数は「引き渡す数(引き渡す値)」のことで、CStr関数の()内に渡す値を指します。
引数として「変換したい変数や値」を渡すと、「String型に変換された変数や値」を私たちが受け取ります。
この受け取る値を「返り値(戻り値)」といいます。
例えば、魚屋さんにアジの3枚おろしを作ってもらいたい場合は、アジを渡して3枚おろしを受け取ります。
アジが引数、3枚おろしが返り値といったところでしょうか。
これで型変換が完了し、String型として扱うことができるため、値の連結が可能になります。

6行目の時点で、変数「str」は「String型」、変数「num」は「Integer型」です。
なので、「CStr」を使わないと、エラーが発生します。
Sub 型変換()
Dim str As String
Dim num As Integer
str = "A"
num = 100
Debug.Print str + num
End Sub

よくある疑問
解説を見ていただいた方の中に、下記の疑問を抱いた方も多いのではないでしょうか。
- 変換元が既にString型ならどうなるの?
- 引数なしだとどうなるの?
変換元が既にString型ならどうなるの?
これまでは、整数を引数に指定しました。
変換元が既にString型の場合はどうなるのでしょうか?
String型である「Utatane」を引数に指定してみます。
Sub 疑問1()
Debug.Print CStr("Utatane")
End Sub

特にエラーは発生しませんでした。
変換元の型は気にしなくてよさそうです。
引数なしだとどうなるの?
下記VBAコードのように、引数なしで実行してみます。
Sub 疑問2()
Debug.Print CStr()
End Sub

エラーが発生しました。
引数は省略できないようです。
では引数に空白を指定してみます。
Sub 疑問()
Debug.Print CStr("")
End Sub
エラーは出ませんでしたが、何も出力されませんでした。
引数に指定したセルが空白だった場合も同様です。
セルの値を取得する方法は下記記事をご参考ください。
実践的な活用例

上図のA列から値を取得し、頭にAを付けてB列に出力する例です。
下記VBAコードを見てください。
Sub 実践例()
Dim i As Long
Dim val As Variant
For i = 1 To 5
val = Cells(i, 1).Value ' A列(1列目)の値を取得
Cells(i, 2).Value = "A" + CStr(val) ' B列(2列目)に出力
Next i
End Sub

6行目で値を取得し、7行目でAをつけて出力しています。
A1~A5までの処理は、Forを使ってループさせています。
Forについては下記記事をご参考ください。
CStrの仲間関数
VBAには、型変換ができる関数が他にもあります。
今回は代表的なものを紹介いたします。
- CInt:Integer型(整数)に変換/変換元に小数点以下があった場合は切り捨てされる
- CLng:Long型(長い整数)に変換
- CDbl:Double型(小数点ありの数値)に変換
- Str:String型(文字列)に変換
StrとCStrは同じように思えますが、違いがあります。
Strは文字列の先頭にスペースが入ります。
Sub 型変換()
Dim num As Integer
num = 100
Debug.Print CStr(num)
Debug.Print str(num)
End Sub

Cstrほど活躍できる場は少ないですが、別の型どうしの計算をする場合に便利ですので活用ください。
うまく動作しないときの対処法
エラーが発生する
コンパイルエラー・実行時エラー
コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。
警告表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。
最後に
VBA(Excelマクロ)での「CStr」関数について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!