Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13040 / 13644 ツリー ←次へ | 前へ→

【7306】動的配列の存在チェック 初心者 03/9/2(火) 11:27 質問
【7312】Re:動的配列の存在チェック つん 03/9/2(火) 12:28 回答
【7315】Re:動的配列の存在チェック 初心者 03/9/2(火) 13:29 質問
【7316】Re:動的配列の存在チェック こうしろう 03/9/2(火) 13:29 回答
【7325】Re:動的配列の存在チェック 初心者 03/9/2(火) 16:24 お礼
【7329】Re:動的配列の存在チェック こうしろう 03/9/2(火) 16:49 発言

【7306】動的配列の存在チェック
質問  初心者  - 03/9/2(火) 11:27 -

引用なし
パスワード
   動的配列に値が格納されているのかを判定して、
データの存在チェックをしたいのですが、
IFの記述で「型が一致しません」という
コンパイルエラーばかりが表示されてしまいます。
(EmptyやvbNullStringにて試みました)
どなたか、記述法を教えていただけないでしょうか。

IFに記述する対象は、配列の初期状態。
デバックにて「インデックスが有効な範囲にありません」と
表示される状態にあるかを判別する処理です。

**宣言**
Piblic strHairetsu() as String

**処理**
---データ読込(繰返し使う)---
Erase Preserve
ReDim Preserve strHairetsu(カウンタ)を使用してデータ格納。

---チェック---
If strHairetsu にデータがあったら Then ←質問はここの記述です。
  For カウンタ = 0 To UBound(strHairetsu)
   データ編集
  Nect カウンタ
End If

宜しくお願い致します。

【7312】Re:動的配列の存在チェック
回答  つん  - 03/9/2(火) 12:28 -

引用なし
パスワード
   初心者 さん、こんにちは

>IFに記述する対象は、配列の初期状態。
>デバックにて「インデックスが有効な範囲にありません」と
>表示される状態にあるかを判別する処理です。
>
>**宣言**
>Piblic strHairetsu() as String
>
>**処理**
>---データ読込(繰返し使う)---
>Erase Preserve
>ReDim Preserve strHairetsu(カウンタ)を使用してデータ格納。
>
>---チェック---
>If strHairetsu にデータがあったら Then ←質問はここの記述です。
>  For カウンタ = 0 To UBound(strHairetsu)
>   データ編集
>  Nect カウンタ
>End If
>
>宜しくお願い致します。

カウンタに使ってる変数のチェックをしたらどうでしょう?
配列変数の初期値を「1」にしといて、
カウンタの変数の初期値を「0」にしといて、

 if i = 0 then

ちゅー感じにすれば?どうでっしゃろ?

【7315】Re:動的配列の存在チェック
質問  初心者  - 03/9/2(火) 13:29 -

引用なし
パスワード
   ▼つん さん:
お返事ありがとうございます。

>カウンタに使ってる変数のチェックをしたらどうでしょう?
>配列変数の初期値を「1」にしといて、
>カウンタの変数の初期値を「0」にしといて、
>
> if i = 0 then
>
>ちゅー感じにすれば?どうでっしゃろ?

IsNullやIsEmptyのような、関数で配列に使用できるものが無いのでしたら
つんさんのおっしゃる方法を選択しようと考えていますが・・・。

配列が空かどうかを判別する命令は無いということでしょうか?

【7316】Re:動的配列の存在チェック
回答  こうしろう  - 03/9/2(火) 13:29 -

引用なし
パスワード
   こんにちわ
ちゃんと配列が宣言されているかどうかは、
こんな感じでチェックできると思います。

が、配列に有効なデータが代入されているかのチェックは不可能ですね。

Sub sample()

Dim ary()

ReDim ary(1 To 10)
If AryReady(ary) Then
  Debug.Print "OK"
Else
  Debug.Print "だめだめ"
End If

Erase ary
If AryReady(ary) Then
  Debug.Print "OK"
Else
  Debug.Print "だめだめ"
End If


End Sub

Function AryReady(ary()) As Boolean
Dim ret
On Error Resume Next
 ret = UBound(ary)
 AryReady = Err = 0
On Error GoTo 0
End Function

【7325】Re:動的配列の存在チェック
お礼  初心者  - 03/9/2(火) 16:24 -

引用なし
パスワード
   ▼こうしろう さん:
お返事ありがとうございます。

教えていただいたチェック方法は、配列をVariant型で宣言した場合に
有効となるようですね。
今回、複数の配列をPublicで宣言して使用するので、
メモリの使用量等を考慮して、インデックスの初期値を0にて
処理する方法にしました。

※回答頂いたお二人の方、ありがとうございました。

【7329】Re:動的配列の存在チェック
発言  こうしろう  - 03/9/2(火) 16:49 -

引用なし
パスワード
   >教えていただいたチェック方法は、配列をVariant型で宣言した場合に
>有効となるようですね。
そんなことはありません。
チェックしたい配列の型とAryReadyの引数の配列の型を合わせるか、
もっと一般的にしたいなら、AryReadyの引数をVariant型の変数で
とるようにすればいいのでは?

Option Explicit

Dim ary() As Double

Sub sample()

ReDim ary(1 To 10)
If AryReady(ary) Then
  Debug.Print "OK"
Else
  Debug.Print "だめだめ"
End If

Erase ary
If AryReady(ary) Then
  Debug.Print "OK"
Else
  Debug.Print "だめだめ"
End If

End Sub

Function AryReady(ary As Variant) As Boolean
Dim ret
On Error Resume Next
 ret = UBound(ary)
 AryReady = Err = 0
On Error GoTo 0
End Function

13040 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free