F0000012_配列の型を任意の型へ変換する

配列の型を任意の型へ変換する 関数リファレンス

この関数について

ExcelVBA(マクロ)では他の高級なプログラミング言語と違い、初期状態からブックが用意されシートやセルへの操作が可能です。このため、どうしても意識せざる得ないものがセルの書式です。先頭が0から始まる会員番号や、日付判定される「丁目」以降の番地や、ハイフンなしの電話番号など、そのままセルに貼り付けると意図した通りに反映しないデータが存在します。こんなとき最も単純な解決策は、データを「Variant」型ではなく「String」型で保持することです。「String」型の変数や配列をセルに代入(入力)すると、意図した通りにデータが反映します。ExcelVBAを学び始めた頃の私は上記のような問題にぶつかり型指定の重要性について考えた結果、様々なデータが混在する表は「String」型の配列として取り扱うことにしていました。しかし、関数リファレンスで紹介する関数群の戻り値は原則「Variant」型です。「String」型と宣言した配列に「Variant」型の配列を代入しようとすると「配列には割り当てられません。」エラーが発生します。前置きが長くなりましたが、すべてのデータを「String」型で扱いたかった私が作成したのがこのページで紹介する配列の型変換を行う関数です。

使い方 ①引数

■引数1:arr
 型変換したい配列

■引数2:var_type_code
 ExcelVBAで標準で使える型指定用の定数を渡します。対応しているのは、vbString、vbVariant、vbLong、vbDouble、vbDateです。指定した型へ変換します。

■引数3:based_index
 配列のbaseを指定できます。デフォルトは1になっています。

使い方 ②呼び出し方例(サンプルコード)

Public Sub Test_CastArrayVariantToAnyting()

    Dim sample_arr() As Variant
    Dim str_arr() As String
    
    ReDim sample_arr(1 To 2, 1 To 2)
    sample_arr(1, 1) = "012345678"
    sample_arr(1, 2) = "2024/08/04"
    sample_arr(2, 1) = "123456789"
    sample_arr(2, 2) = "2024/08/04"
    
    '■「配列には割り当てられません。」エラーが発生します。
    'str_arr = sample_arr
    
    '■エラーなく実行できます。
    str_arr = CastArrayVariantToAnyting(sample_arr, vbString, 1)

End Sub

【結果】配列の型変換ができました

上記のサンプルコードで「Variant」型の配列を「String」型の配列へ代入しようとしている部分をコメントアウトしています。コメントを外して実行すると「配列には割り当てられません。」というエラーが発生します。しかし型変換関数を経由すると同エラーは発生しません。サンプルコードでは単純に「Variant」型配列を格納しようとしていますが、これが関数の戻り値の場合でも同様のエラーが起きます。その時、型変換配列を経由することでエラーを回避できます。

・・・私以外の人に需要がある想像ができませんが。

この関数は関数リファレンスからコピペ可能です!

この記事のタイトルを検索窓へ貼り付けて関数を検索してみましょう。 表示されたコードをクリックするだけでコピー完了! あとは自身で作成したモジュールに貼り付けるだけでこの関数を利用できます。サンプルコードもあり! 関数リファレンストップへ

Comment