サイトカレンダー

サイトカレンダーをスキップ

2018年 06月
«
»
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

記事カテゴリ

ユーザー機能


 2018年6月20日(水) 16:13 JST

[Excel VBA] 空の配列を管理する

  • 2005年10月11日(火) 18:33 JST
  • 投稿者:
  • 表示回数
    7,258

VBA で配列の中身を順番に処理する場合、LBound から UBound をまでを順に処理します。
しかし、要素が 0 個の空配列は LBound も UBound も同じく 0 なので、必ず一度処理されてしまいます。

空になる可能性のある配列を扱う場合には、配列の宣言後以下の処理を行っておくと便利です。

SafeArrayAllocDescriptor 1, [配列]

この関数を使用するには、以下の定義文を Decralation に記述しておく必要があります。

Private Declare Function SafeArrayAllocDescriptor Lib "oleaut32" 
   (ByVal cDims As Long, _
    ByRef ppsaOut() As Any) As Long

この関数 (Windows API) を使用すると、UBound の値が -1 になります。
ですから、

for i = LBound([配列]) to UBound([配列])

と書いても、空配列の場合には一度も処理されることはありません。
もちろん、要素がある場合には要素数の回数だけループします。

要素数を求める場合には、以下の式で求めることができます。

UBound([配列]) - LBound([配列]) + 1

トラックバック

このエントリのトラックバックURL:
http://www.blackcatlab.com/trackback.php/ProgFAQ-Xls_EmptyQueue

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。