Excel VBA質問箱 IV

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

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


63615 / 76738 ←次へ | 前へ→

【17718】Re:Eraceについて教えて下さい
お礼  音無 響子  - 04/9/6(月) 15:09 -

引用なし
パスワード
   >これは問題ないと思いますが・・・おそらく
ありがとうございます。


>他に気になることがあります。
>
>「A.a(0)」という変数名ですけど、「ドット」は使えないと思います。
>実際ドットを入れて宣言してみたら、VBEに叱られてしまいましたけど、そんなことありませんでした?

口足らずな私ですいません。。。
現在、このように宣言しています。

Private Type KOUZOUTAI
  a() As String
  b As Integer
End Type

Private a As KOUZOUTAI


>
>>ReDim A.a(0)
>>
>>For i = 0 To 10
>>
>>  If XXX Then
>>    ReDim Preserve A.a(i)
>>    ---処理開始---
>>      :
>>    ---処理終了---
>>  End if
>>
>>  Erase A.a()
>>Next
>
>これだと、例えば、2.4.6.8.10がIf文で通ったとしたら、
>A.a(2),A.a(4)・・・・・・に値が入って、A.a(0),A.a(1)・・・・・・が空になるんじゃないかと思うんですが、添え字用の変数を別にする必要がないですか?

→おっしゃるとおり。
 何かおかしいと思てたら、掲載したサンプルロジックが間違えてました。
 すいません、間違いでした。↓
 
 誤:For i = 0 To 10
 正:Do While True

 でした。つまり、グルグルLoopして条件に合えば、Redimにより拡張します。
 

>それと、EraseをFor Next文の中に書いてますが、これだと、いちいち解放されてしまうので、外に出さなくてはいけないんじゃないかと思いますが・・・どないでしょう?
→おっしゃるとおり。確かにそうなんですが…何を隠そう、この配列を毎回Loop毎に、
 使い回ししてるんです。だから、毎Loop毎にEraceしています。
 
 変則的なロジックですいません。。。


まとめると…

Private Type KOUZOUTAI
  a() As String
  b As Integer
End Type

Private a As KOUZOUTAI

Dim i As Integer

ReDim A.a(0)

Do While True

  If XXX Then
    ReDim Preserve A.a(i)
    ---処理開始---
      :  ←ここで構造体Aにデータを格納
      :  ←ここで構造体Aのデータをセルに出力
    ---処理終了---
  End if

  Erase A.a()
Loop

0 hits

【17712】Eraceについて教えて下さい 音無 響子 04/9/6(月) 13:18 質問
【17717】Re:Eraceについて教えて下さい つん 04/9/6(月) 14:16 発言
【17718】Re:Eraceについて教えて下さい 音無 響子 04/9/6(月) 15:09 お礼
【17719】Re:Eraceについて教えて下さい Jaka 04/9/6(月) 15:17 回答
【17720】あ、終わってた。 Jaka 04/9/6(月) 15:19 発言

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