- ベストアンサー
VBA 構造体の値参照
いつもお世話になっています。 Access VBAにて構造体を作成し、その値をループで渡したいのですが、ご存知の方おられましたら、お助けください。 (例) Private Type HD_REC ID as string * 2 Name as string * 10 Lev as string * 50 End Type Function SetData() Dim rs As RecordSet Set rs = CurrentDB.OpenRecordSet("XXXXXXXX") While Not rs.EOF rs.Fields(i) = 'ここに構造体のID,Name,Levを渡したいのです。 i=i+1 Wend End Function よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あのう・・・ >やはり、構造体で作っている以上は、select case でその分書かないといけないということですね? ループまわしてSelect Caseで振り分ける必要すらないのでは? 上から下に構造体のメンバひとつについて一行ずつ書いてくだけでしょ、普通。 無理矢理難しくしても意味がありません。 rs.Fields(0) = hd_rec.ID rs.Fields(1) = hd_rec.Name rs.Fields(2) = hd_rec.Lev これで十分ですよね。 1行ずつ書くよりステップ数増やしてどうするんですか。 >While Not rs.EOF >rs.Fields(i) = 'ここに構造体のID,Name,Levを渡したいのです。 >i=i+1 >Wend >End Function あえて最初に確認しなかったんですが、これって何をしたいんですか? レコード追加ですか?更新ですか? ループの終了条件がEOFですし、次のレコードに移ってるようにも見えないし。 一回のアクションで1レコードのみ処理したいんですか?複数のレコードをまとめて処理したいんですか? まとめて複数レコードを処理したいということでしたら、構造体の変数(メンバじゃないですよ)そのものが配列になっているんでしたらループ使えますよ。 >実際に使用する要素数は20近くあり、その要素ごとの数字が必要になるので、配列にしてやってみます。 でそのたかだか20近くも羅列したくないということでしたら構造体の要素そのものを配列にするかコレクションにするしかないでしょうね。 >rs!a = HD_REC(i,i)・・・??? >↑ >配列で、例えば 配列A(文字列, 数字) >とした時、文字列のみループや、数字の方のみループなどは可能なのでしょうか? >文字列、数字はセットなので配列は上記のように宣言したいのですか・・・ あのう・・・なんで2次元で配列宣言してるのに添え字が1種類しか出てこないんですか? rs!aって書いちゃったら2次元配列にする意味ないじゃないですか。 結局そのあと rs!a = HD_REC(i,0) rs!b = HD_REC(i,1) ってフィールド羅列になっちゃいますよ。 2次元配列にするんでしたら2重ループが当たり前ですよね。
その他の回答 (2)
- mas_sama
- ベストアンサー率50% (2/4)
totoro_shさん 構造体の中身「ID,Name,Lev」をループで順番に渡したいということでしょうか??? 順番で渡すからには配列やコレクションになっているほうが都合が良いとは思いますが、 条件分岐で順番に渡せるように書くことはできます。 Const LNG_AREA_HD_REC_COUNT = 3 '構造体の要素数 While Not rs.EOF '構造体の要素数で割った余りで 'それぞれの要素に分岐します select case i \ LNG_AREA_HD_REC_COUNT case 0 : IDを代入しましょう。 case 1 : Nameを代入しましょう。 case 2 : Levを代入しましょう。 '構造体の要素が増えるたびに 'ここに追加しましょう。 end select i=i+1 Wend End Function 一例ですが、実現したいことと違っていたらごめんなさい。 実現したいことを詳しく教えていただければ、 詳しい回答もできますので よろしければ教えてくださいw
お礼
mas_sam様 返事遅くなり申し訳ありません。 回答ありがとうございます。 やはり、構造体で作っている以上は、select case でその分書かないといけないということですね?実際に使用する要素数は20近くあり、その要素ごとの数字が必要になるので、配列にしてやってみます。 (例) dim HD_REC(20,20) as Varient dim i as integer --- 中略 --- for i = 0 to 20 ...処理 rs!a = HD_REC(i,i)・・・??? ↑ 配列で、例えば 配列A(文字列, 数字) とした時、文字列のみループや、数字の方のみループなどは可能なのでしょうか? 文字列、数字はセットなので配列は上記のように宣言したいのですか・・・ next 次から次へ質問ばかりすみません。 もし、時間がありましたらよろしくご指導お願いします。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
構造体の場合、どうやっても無理です。 あきらめて1行ずつ書いてください。
お礼
ありがとうございます。 ループの添え字は転記ミスでした。申し訳ありません。 確かに、i、jの2重ループです。 今回は、時間がなくなりましたので1行ずつ書いて処理しました。ありがとうございました。