- ベストアンサー
配列の要素がすべてカラかどうかの判断
ある動的配列にエクセルのセルの値を入れ込みデータがあるかないかでプロシージャーを分岐したいのですが、配列の要素がすべて空であるかどうかの判断で困っています。 例えば Dat = Worksheets(wrks).Range(rng).Value でDatという配列にrngというセル範囲の値を入れて、 Datのすべての要素が空("")なら~処理1~ Datに1つでもデータがあれば~処理2~ のようにしたいのですが、なにかよい方法はないでしょうか。 アドバイスよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
If Application.WorksheetFunction.CountA(Dat) = 0 Then ~処理1~ Else ~処理2~ End If みたいな感じでいかがでしょうか。
その他の回答 (3)
- nicotinism
- ベストアンサー率70% (1019/1452)
Sub test() Dim a As Variant, b As Variant a = Split("1,2,3", " ") b = Split("", " ") '空っぽ Debug.Print "a=" & (Join(a) <> ""), "b=" & (Join(b) <> "") 'Excel2002 で試したので以前のバージョンでは動かないかも?です End Sub
お礼
なるほど~。 ただJoinは一次元配列にしか使えないようで、動的配列ではうまくいきませんでした。 でも考え方は大変参考になりました。 どうもありがとうございました!
Excel は、一度も扱ったことのない門外漢ですが・・・。 次は、Sheets(1)、(2)の2つのセルに値が存在するか否かをチェックするコードです。 MsgBox の所で分岐すれば宜しいかと思います。 Private Sub CommandButton1_Click() Dim isFound As Boolean Dim I As Integer Dim J As Integer For I = 1 To 2 For J = 1 To 2 If Len(Worksheets(I).Cells(J, 1).Value & "") > 0 Then isFound = True I = 2 Exit For End If Next J Next I MsgBox isFound End Sub なお、動的配列に取り込む必要があれば、そのように修正して下さい。
お礼
アドバイスどうもありがとうございました! 考え方など今後の参考にさせていただきます。
- fallen_angel
- ベストアンサー率12% (287/2339)
アルゴリズムとしては、以下の通りでOKでは? (1)セルの対象範囲を得る (2)範囲内をループさせ各セルの内容をチェックする。 行列ですから2重ループですね。
お礼
アドバイスありがとうございました! 参考にさせていただきます。
お礼
あ!!!! そうですね、CountA関数を使えば簡単にできますね。 アドバイスどうもありがとうございました!