Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » Left関数の戻り値は結局String

Left関数の戻り値は結局String

「left関数で抜き出すと データ型は文字列」
という検索で、このサイト『インストラクターのネタ帳』へアクセスがありました。

どのプログラミング言語での話かわかりませんけれど、VBAのLeft関数について記事を書いておきます。

[スポンサードリンク]

Left関数の戻り値を確認するサンプル

以下のSubプロシージャを実行してください。

Sub Left関数の戻り値を確認する()
 Dim num As Long
 num = 1234567

 Dim tmp As Variant
 tmp = Left(num, 3)

 MsgBox tmp
 MsgBox TypeName(tmp)
End Sub

Left関数の戻り値を代入しただけの変数tmpの値「123」と、TypeName関数で取得したtmpのデータ型を示す「String」が、
  MsgBox tmp
  MsgBox TypeName(tmp)
メッセージボックスに表示されます。

検索キーワード
「left関数で抜き出すと データ型は文字列」
のとおり、Left関数で取得したデータは、String型・文字列型です。

VBAのLeft関数の仕様を知らないと、Long型データの左から3文字「123」を取得するのだから、tmpはLong型またはInteger型になると考えてしまうかもしれませんが、違います。Left関数の戻り値は、「123」のような数値として扱い得るデータであったとしても、String型・文字列型です。

ローカルウィドウを使った確認

拙著『いちばんやさしいExcel VBAの教本』等で多用している、ローカルウィドウを使った確認も行いましょう。

VBEの、メニュー[表示]-[ローカルウィドウ]からローカルウィドウを表示した状態で、上記のSubプロシージャをステップ実行です。

Left関数の戻り値を、Variant型の変数tmpに代入する、
  tmp = Left(num, 3)
が実行された後には、下図のような表示になります。

tmpの[型]欄には、Variantで宣言していた変数に、Left関数の戻り値が代入された結果Stringになっているので、「Variant/String」と表示されています。

この「String」が、先ほど
  MsgBox TypeName(tmp)
で表示された「String」です。

Left$関数はあるけれど

VBAには、定義的にはVariantを返すことになっているけれど、実質的にStringを返すケースが多い関数等に、関数名の末尾に「$」のついた関数が複数用意されています(下図はオブジェクトブラウザーで「$」を検索した結果)。

Left関数についてもLeft$関数が存在します。オブジェクトブラウザーの詳細ペインに「As String」と表示されているとおり、

Left$関数の戻り値は、明確に文字列です。

数値として扱い得るデータを返す際に、Long型など数値型のデータを返すのならば、Left関数の存在意義があるとは思うのですが、実際はそうではないのでLeft$関数を別途用意するより、Left関数を「As String」とした関数にして欲しいと、私は思います。

最終更新日時:2021-01-06 13:18

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » Left関数の戻り値は結局String

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.