プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (4件)

If Application.WorksheetFunction.CountA(Dat) = 0 Then


 ~処理1~
Else
 ~処理2~
End If

みたいな感じでいかがでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/28 22:37

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/28 22:40

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

なお、動的配列に取り込む必要があれば、そのように修正して下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/28 22:44

アルゴリズムとしては、以下の通りでOKでは?


(1)セルの対象範囲を得る
(2)範囲内をループさせ各セルの内容をチェックする。
   行列ですから2重ループですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/28 22:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています