こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

よろしくお願いします。

投稿日時 - 2004-11-19 14:51:58

QNo.1091261

すぐに回答ほしいです

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

あのう・・・

>やはり、構造体で作っている以上は、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重ループが当たり前ですよね。

投稿日時 - 2004-11-23 13:57:37

お礼

ありがとうございます。
ループの添え字は転記ミスでした。申し訳ありません。
確かに、i、jの2重ループです。
今回は、時間がなくなりましたので1行ずつ書いて処理しました。ありがとうございました。

投稿日時 - 2004-11-23 20:29:57

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2004-11-20 15:19:28

お礼

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


次から次へ質問ばかりすみません。
もし、時間がありましたらよろしくご指導お願いします。

投稿日時 - 2004-11-22 18:54:08

ANo.1

構造体の場合、どうやっても無理です。
あきらめて1行ずつ書いてください。

投稿日時 - 2004-11-19 15:19:50

あなたにオススメの質問