Excel VBA質問箱 IV

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

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


7682 / 13645 ツリー ←次へ | 前へ→

【37311】データが入っていない配列の判断方法について mai×2 06/4/28(金) 17:22 質問[未読]
【37312】すみません mai×2 06/4/28(金) 17:24 発言[未読]
【37329】Re:データが入っていない配列の判断方法に... ichinose 06/4/29(土) 8:18 発言[未読]
【37331】Re:データが入っていない配列の判断方法に... mai×2 06/4/30(日) 1:48 発言[未読]
【37453】Re:データが入っていない配列の判断方法に... mai×2 06/5/8(月) 1:31 発言[未読]
【37454】Re:データが入っていない配列の判断方法に... Blue 06/5/8(月) 2:07 発言[未読]
【37554】すみません mai×2 06/5/11(木) 15:57 お礼[未読]

【37311】データが入っていない配列の判断方法につ...
質問  mai×2  - 06/4/28(金) 17:22 -

引用なし
パスワード
   お世話になります。

SOAP通信を使って、サーバからデータを取得し、それをエクセルのシートにコピーするマクロを組んでいます。
データは、下記のような配列になっています。

data(0)(0)=20060428
data(1)(0)=""
data(2)(0)=""
data(3)(0)="001"
data(3)(1)="002"
data(3)(2)="003"
data(4)(0)="株式会社AAA不動産"
data(4)(1)="○×商店"
data(4)(2)="CS製作所"

シートイメージを作るなら下記でしょうか?
 0       1         2      3      4      
(日付)   (ERRコード) (ERRMsg) (CODE)  (名称)
0 20060428  ""      ""    
1                 "001"   "株式会社AAA不動産"
2                 "002"   "○×商店"
3                 "003"   "CS製作所"

このうち、エクセルシートに貼り付けるのはCODEと名称のみですので、
LBOUND(data(3))からUBOUND(data(3))まで添え字をループさせて
貼付を行っています。
ところが、検索結果が「なし」の場合、
data(3)は「インデックスが有効範囲にありません」のでエラーになってしまいます。
このような場合「データなしエラー」にしたいのですが、どのような判断式を入れたらよいでしょうか?
IsArrayもIsEmptyもだめでした。

すみませんが、お知恵を拝借できればと思います。
よろしくお願い致します。

【37312】すみません
発言  mai×2  - 06/4/28(金) 17:24 -

引用なし
パスワード
   シート状のサンプル、ズレてしまっていますので、
無視してください。

【37329】Re:データが入っていない配列の判断方法...
発言  ichinose  - 06/4/29(土) 8:18 -

引用なし
パスワード
   ▼mai×2 さん:
おはようございます。

>データは、下記のような配列になっています。
>data(0)(0)=20060428
>data(1)(0)=""
>data(2)(0)=""
>data(3)(0)="001"
>data(3)(1)="002"
>data(3)(2)="003"
>data(4)(0)="株式会社AAA不動産"
>data(4)(1)="○×商店"
>data(4)(2)="CS製作所"

本当に上記のような表記でデータを取得(上記は設定ですが)
しているのですか?上記のような表記をするには、

'============================================================
Sub sample()
  Dim data(4) As Variant
  Dim x0 As Long, x1 As Long
  data(0) = Array(20060428)
  data(1) = Array("")
  data(2) = Array("")
  data(3) = Array("001", "002", "003")
  data(4) = Array("株式会社AAA不動産", "○×商店", "CS製作所")
  For x0 = LBound(data()) To UBound(data())
    For x1 = LBound(data(x0)) To UBound(data(x0))
     MsgBox data(x0)(x1)
     Next x1
    Next x0
End Sub

一例ですが、dataという配列要素に配列を設定すれば

data(x0)(x1)

という表記をするのですが、間違いないですか?

>ところが、検索結果が「なし」の場合、
>data(3)は「インデックスが有効範囲にありません」のでエラーになってしまいます。
>このような場合「データなしエラー」にしたいのですが、どのような判断式を入れたらよいでしょうか?

上記のエラーが発生するのならば
エラートラップを拾う方法が考えられますけどねえ!!
  wk = data(3)
  If Err.Number <> 0 Then MsgBox "データなし"

私にとっては、本当に上記の表記で取得できる形式で
データが配置されているのかということに興味をもちました。

【37331】Re:データが入っていない配列の判断方法...
発言  mai×2  - 06/4/30(日) 1:48 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは。
誤解させるような書き方をしてしまって、すみません。
データ配列をこのように
>>data(0)(0)=20060428
>>data(1)(0)=""
>>data(2)(0)=""
>>data(3)(0)="001"
>>data(3)(1)="002"
>>data(3)(2)="003"
>>data(4)(0)="株式会社AAA不動産"
>>data(4)(1)="○×商店"
>>data(4)(2)="CS製作所"
データはVBAで定義するのではなく、タグと検索条件を送信してSOAP通信で取得するので...
これは、取得したデータをウォッチウィンドウで見たときにこのようになっている...という意味です。
"="が余計でしたね。ごめんなさい。

エラートラップを拾う方法でOKかも知れません。
「データがないことを判断する」というやり方に凝り固まっていて、
思いつきませんでした。
月曜日、早速試してみたいと思います。

【37453】Re:データが入っていない配列の判断方法...
発言  mai×2  - 06/5/8(月) 1:31 -

引用なし
パスワード
   月曜日に試しますと書いたのですが、
急用でネットから離れており、おそくなってしまいました。
レスを下さったichinoseさん、大変失礼いたしました。

さて、ご提示いただいたコードですと、
wk=data(3)
の行でERRになるため、次の行の「エラーコードで判断する」という行には進めませんでした。
要は、data(3)は「ない」ので何かを判断することもできない...
というイメージなのでしょうか?

【37454】Re:データが入っていない配列の判断方法...
発言  Blue  - 06/5/8(月) 2:07 -

引用なし
パスワード
   > エラーコードで判断する
には
On Error Resume Next が必要です。

【37554】すみません
お礼  mai×2  - 06/5/11(木) 15:57 -

引用なし
パスワード
   ▼Blue さん:
>> エラーコードで判断する
>には
>On Error Resume Next が必要です。

恥ずかしい...(^^;
最初にERR時の行き先を指定しているのをすっかり忘れていました...
ありがとうございましたm(__)m

errトラップを拾う方法でうまくいきそうです。
ありがとうございましたm(__)m

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