[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『配列のデータチェック方法』(迷い猫)
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.