[[20230920165554]] 『配列のデータチェック方法』(迷い猫) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『配列のデータチェック方法』(迷い猫)

Dim dat() As Variant

データの追加方法は
追加するデータがあれば

n = n + 1(nの初期値は0)
ReDim Preserve dat(n)
dat(n) = data(n)

デバッグしていると
データが全くない場合もあり
この場合

ubound(dat) で配列の要素数を求めようとすると
エラーがかかります。

最初に dat に Empty や Nothing などが
代入できれば、それを確認するのですが
それもできません。

この場合どうすればよいのでしょうか?
on error goto で処理するしかないのでしょうか?

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 ぐぐってみるとこんなのありますね。

 【VBAの動的配列が空(要素が無い状態)かどうか判定する方法::Not (Not 動的配列)】
http://blog.livedoor.jp/springjoe2/archives/52121223.html

(半平太) 2023/09/20(水) 17:24:50


 >データが全くない場合もあり
 ここをもう少し詳しく説明してください。

 動的配列を宣言したが、まだRedimしていない状態ということですか?

(xyz) 2023/09/20(水) 20:48:24


 そうであれば、
    If (Not ARR) = -1 Then
        Debug.Print "配列が初期化されていません"
    End If
 とすればよいかと思います。

 紹介いただいた記事にある、
 >' 配列が空ならNot (Not ARR)はTrueになる
 は、私の環境では、0になり、Trueにはなりませんでした。

(xyz) 2023/09/21(木) 07:34:24


 よくあるテクニックですが、
 1次元配列のVariant型であれば、初期要素を-1にすれば、
 判定処理をしなくて済みます。
 判定するならば、要素の最小インデックスをLBound関数で、
 エラー無く取得できるので、-1かそれ以上かすれば、
 いいかと。

 それと、配列の最小インデックスは0を基準にしたほうが
 ベターです。

 Sub sample()
     Dim dat() As Variant
     dat = Array()
     Dim i&
     For i = 0 To 100
         ReDim Preserve dat(UBound(dat) + 1)
         dat(UBound(dat)) = i
     Next
 End Sub

(tkit) 2023/09/21(木) 08:39:12


 私はこちらの記事のほうが、わかりやすかったです

 [VBA] 動的配列の初期化判定
 https://blog.sgnet.co.jp/2017/01/vba.html

 私ならば、
 ReDim Preserve dat(n)
 dat(n) = data(n)
 ってする場合、
 nの値を調べれば初期化されているかどうか分かるようにコードを組みます
(´・ω・`) 2023/09/21(木) 09:12:54

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.