[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/10/03(Mon) 13:56
投稿者名:DAI
URL :
タイトル:
空の配列の判定
いつもお世話になってます。

空の配列を判定したいのですが、
どのように記述してよいのかわかりません。

たとえば、

Dim sArray() As String

If sArray = Nothing Then
    '配列が空の場合の処理
Else
    '配列に値が入っている場合の処理
End If

以上のように配列に値が入っているかどうかを判定したいのですが、
Nothingではエラーとなってしまいます。

どなたか教えてください。

投稿時間:2005/10/03(Mon) 14:33
投稿者名:いな
Eメール:
URL :
タイトル:
Re: 空の配列の判定
私は、こんな感じの関数で判断しています。
(-1ならば、空の配列)

'*********************************************************************
' 機    能  : 配列の要素数を返す
' 引 き 数  : strArray  配列
'*********************************************************************
Public Function cmnUBound(strAr() As String) As Long
    On Error GoTo cmnUBound_ERR
    
    cmnUBound = UBound(strAr)
    Exit Function

cmnUBound_ERR:
    If Err.Number = 9 Then
        cmnUBound = -1
    End If
End Function

投稿時間:2005/10/03(Mon) 15:04
投稿者名:DAI
URL :
タイトル:
Re^2: 空の配列の判定
> 私は、こんな感じの関数で判断しています。
> (-1ならば、空の配列)
>
> '*********************************************************************
> ' 機    能  : 配列の要素数を返す
> ' 引 き 数  : strArray  配列
> '*********************************************************************
> Public Function cmnUBound(strAr() As String) As Long
>     On Error GoTo cmnUBound_ERR
>    
>     cmnUBound = UBound(strAr)
>     Exit Function
>
> cmnUBound_ERR:
>     If Err.Number = 9 Then
>         cmnUBound = -1
>     End If
> End Function

丁寧に教えて頂きありがとうございます。

そうですか、こういったメソッドを準備しないといけないのですね。
勉強になりました。

投稿時間:2005/10/03(Mon) 14:44
投稿者名:YK
Eメール:
URL :
タイトル:
Re: 空の配列の判定
こんにちは。
Public Declare Function SafeArrayGetDim Lib "oleaut32" _
                        (ByVal pa As Long) As Long
Public Declare Sub GetMem4 Lib "msvbvm60" _
                        (ByRef pa() As Any, ByRef Var As Long)

Sub TEST()
    Dim sArray() As String
    Dim lngNum      As Long

'    ***** 配列があるかどうかのチェック *****
    GetMem4 sArray, lngNum
    If lngNum <> 0 Then
        Debug.Print "次元数は " & SafeArrayGetDim(lngNum)
    Else
        Debug.Print "初期化されていません"
    End If
End Sub

投稿時間:2005/10/03(Mon) 15:09
投稿者名:DAI
URL :
タイトル:
Re^2: 空の配列の判定
> こんにちは。
> Public Declare Function SafeArrayGetDim Lib "oleaut32" _
>                         (ByVal pa As Long) As Long
> Public Declare Sub GetMem4 Lib "msvbvm60" _
>                         (ByRef pa() As Any, ByRef Var As Long)
>
> Sub TEST()
>     Dim sArray() As String
>     Dim lngNum      As Long
>
> '    ***** 配列があるかどうかのチェック *****
>     GetMem4 sArray, lngNum
>     If lngNum <> 0 Then
>         Debug.Print "次元数は " & SafeArrayGetDim(lngNum)
>     Else
>         Debug.Print "初期化されていません"
>     End If
> End Sub

返答ありがとうございます。

やはり、判定用メソッドを用意しなければならないようですね。
試してみます。

投稿時間:2005/10/05(Wed) 12:48
投稿者名:uzo
Eメール:
URL :
タイトル:
Re: 空の配列の判定
String型の動的配列であれば、

sArray = split("")

で初期化できます。

If Ubound(sArray) >= 0 Then
'配列に値が入っている場合の処理
Else
'配列が空の場合の処理
End If

投稿時間:2005/10/05(Wed) 16:19
投稿者名:Eight
Eメール:
URL :
タイトル:
Re: 空の配列の判定
オブジェクトがNothingかどうかを判定するには
「=」ではなく「Is」を使います。

> If sArray = Nothing Then
の部分は
if sArray Is Nothing Then
でよいのでは・・?

投稿時間:2005/10/06(Thu) 10:09
投稿者名:じゃんぬねっと
Eメール:
URL :http://jeanne.wankuma.com/
タイトル:
Re^2: 空の配列の判定
> if sArray Is Nothing Then
> でよいのでは・・?

結局のところ、それで判定はできませんけどね。
VB7 以降でないと手軽に null 判定できないのはつらいですね。orz