• ベストアンサー

構造体についてここが知りたい!(参照方法について)

いつもお世話になっています、宜しくお願いします。 現在ACCESS2002、SQLサーバーで次のことを実現しようと思っています。 やっていることは 項目名が数字部分のみ違う要素を30個もつ構造体(構造体名:Kouzoutai) 下記のように用意します。 Type Kouzoutai  KOUMOKU1  KOUMOKU2  KOUMOKU3   ・   ・   ・  KOUMOKU29  KOUMOKU30 End Type この項目、KOUMOKU1~30でNULLのものには1を格納するという処理を 行いたいと思っています。 IF文を30個書いても良いのですが、あまりに冗長的なソースに なってしまうので、ループを使って行いたいと思っています。 例えばコントロール名などでは、ME("KOUMOKU" & CNT).VALUEというような 書き方で値が取得できるので、そのような感じで下記のように 記述したのですが、うまく動かず行き詰っています。 Dim CNT As integer CNT = 1 DO WHILE CNT <= 30  IF ISNULL(Kouzoutai.("KOUMOKU" & CNT) THEN   Kouzoutai.("KOUMOKU" & CNT) = 1  END IF  CNT = CNT + 1 LOOP 基本的なことを見落としているかもしれませんが、 何かお気づきの方が居られましたら、ご教授ください。 宜しくお願いいたします。

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

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

すべて同じ名前でよいのであれば、 配列にしてしまえば、悩まずにすむはずですが。 Dim Koumoku(1 to 30) as Variant これでは、駄目な理由を説明してもらえるならば、他の手を考えてみますが?

takatoo
質問者

お礼

早速のレスありがとうございます!! 確かに配列にすれば、うまくいきました。 簡単なようですが、頭の固い私には思いつきませんでした。 質問にも書きましたが、コントロール名の場合に ["コントロール名" & CNT]の書き方で書いたもので、 この方法しか頭にありませんでした。 本当にありがとうございます。

その他の回答 (1)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

まずKouzoutai.("KOUMOKU" & CNT)に無理があります。 Kouzoutai.KOUMOKU0というな処理を期待されてたかと思いますが KOUMOKU0というのは文字列ではなく変数名です。 カウントしていきたいのなら Type Kouzoutai KOUMOKU(30) End type とするべきです。 コントロールの場合はそういう書き方も可能ですが結局はコントロール名からメモリの場所を検索して割り出してるにすぎません。 そういう場合はコントロールも配列にした方が(速度的な面も含めて)良いです。 ネイティブコードコンパイルの場合、基本的に変数名の情報はなくなります。

takatoo
質問者

お礼

早速のレスありがとうございます! you-mさんにもご教授していただいたのですが、配列にするとうまくできました。 >コントロールの場合はそういう書き方も可能ですが結局はコントロール名からメ >モリの場所を検索して割り出してるにすぎません。 >そういう場合はコントロールも配列にした方が(速度的な面も含めて)良いで >す。 貴重なご教授ありがとうございます。 大変参考になりました。

関連するQ&A