質問: Access VBAでcollectionやitem等が使われている箇所の意味を理解したいです 今、こちら のようなVBAコードがあります。 このコードを読解しようとしたのですが疑問が生じまして、ご助言いただけますと有難いです。 1「For Each varCode In personnel」という使い方がありますが。 これはFor Eachステートメントだということですが、「バリアント型もしくはオブジェクト型で指定する必要があります。」と、説明しているサイトがありました。 しかしpersonnelという変数は、collection型?で定義されております。 これは一体どういうことなのでしょうか...コードが間違っているのでしょうか...疑問です。
回答: いろいろ突っ込みどころの多い質問です。 1誤解 まず、の文章を誤解しています。 そのページには「コレクションの要素を受け取る変数がバリアント型かオブジェクト型です」と書かれています。 for eachとはコレクションや配列など要素の集合から順に要素を取り出す構文で、要素の受け取り先がバリアントかオブジェクトです。 「for each x in y」のxがVariantかObject、yがCollectionかArrayです。 ・Collectionとはキーとアイテムをワンセットとした情報の集合 ・collectionXX.Add(itemXX,keyXX)でコレクションにアイテムを追加する (集合なのでたいていは複数追加する) ・a=collectionXX.Item(keyXX)でkeyXXに合致するアイテム(itemXX)をaに求める ・For each a In collectionXX~NextでcolletionXX内のアイテムをすべて順にaに求めて繰り返す 3参考にしている情報が不適切 だれが書いたかわからない正しいかどうかもわからない情報を元に知識を得ようとすると遠回りになることが多い。 AccessVBAの言語仕様、構文、使用例など基本的なことはMicrosoftオフィシャルをみればちゃんと解説してある。 参照しているGithubのコードには3つのコレクション(personnel、m_kazu、money)にアイテムをaddしている部分が示されていないので、確かなことはなにも言えない。 示されている範囲から想像できるのは、 personnelコレクション p1 アイテムは文字列 (cstrで型変換してるから) p2 アイテムの最初の1文字は数値で都道府県コード p3 アイテムの3文字目以降も数値で管轄コード p4 キーは不明 m_kazuコレクション k1 キーはpersonnelコレクションのアイテム値である文字列(p1) k2 キーはおそらく日付をあらわす文字列 (confirmationの引数名がi_dateだから) ということはp1も日付を表す文字列なんだろうけど、上記p2p3との整合性がないから意味不明。 k3 clng(money.item(varCode))しているかアイテムの内容は数値 k4 キー(p1)を持つアイテムがなければDBにinsertあればupdate moneyコレクション m1 たぶんkansu1プロシージャの内で要素が設定されるんだろう (ただし、Call kansu1 =(money)という構文はありえない) m2 clng(money.item(varCode))としているから、アイテムは数値でキーはp1 こんなコード必死にみたって何にもならない。 業務上やらなければならない既存コードだから見ているのなら仕方ないが、言語やプログラムングを習得するためにみているならやめたほうがいい。