• ベストアンサー

配列の要素がすべてカラかどうかの判断

ある動的配列にエクセルのセルの値を入れ込みデータがあるかないかでプロシージャーを分岐したいのですが、配列の要素がすべて空であるかどうかの判断で困っています。 例えば   Dat = Worksheets(wrks).Range(rng).Value でDatという配列にrngというセル範囲の値を入れて、   Datのすべての要素が空("")なら~処理1~   Datに1つでもデータがあれば~処理2~ のようにしたいのですが、なにかよい方法はないでしょうか。 アドバイスよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

If Application.WorksheetFunction.CountA(Dat) = 0 Then  ~処理1~ Else  ~処理2~ End If みたいな感じでいかがでしょうか。

Dai95
質問者

お礼

あ!!!! そうですね、CountA関数を使えば簡単にできますね。 アドバイスどうもありがとうございました!

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

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

Dai95
質問者

お礼

なるほど~。 ただJoinは一次元配列にしか使えないようで、動的配列ではうまくいきませんでした。 でも考え方は大変参考になりました。 どうもありがとうございました!

noname#140971
noname#140971
回答No.2

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 なお、動的配列に取り込む必要があれば、そのように修正して下さい。

Dai95
質問者

お礼

アドバイスどうもありがとうございました! 考え方など今後の参考にさせていただきます。

回答No.1

アルゴリズムとしては、以下の通りでOKでは? (1)セルの対象範囲を得る (2)範囲内をループさせ各セルの内容をチェックする。    行列ですから2重ループですね。

Dai95
質問者

お礼

アドバイスありがとうございました! 参考にさせていただきます。

関連するQ&A