更新結果は、イミディエイトウィンドウでは、0件でしたが、実際は、3件更新されました
それは私の例示したマクロをそっくりそのままコピーして実行したのではなく、ご自身が作成されたマクロを部分的に修正されたものを実行されたからではないでしょうか。
例えば、Execute メソッドの呼び出し時に引数 RecordAffected に Long 型の変数( lngRecordAffected )を渡していない、RecordAffected を介して取得した更新件数を別の Long 型の変数( lngAffectedTotal )に累計加算する処理を記述していない等。
更新合成キーが異なるのかと思い、VLOOKUP関数で、Excel上で検証しましたが、VLOOKUP関数では反応します。
目検で同じように見えますし、EXACT関数で確認しても、Trueとなり、同じように見えます。
比較/更新対象となるのはあくまで Access 側のテーブル/フィールドですので、Excel ワークシート側のデータのみを検証しても正確なことは判らないでしょう。
正誤:iif([Q_単価更新用].[更新合成キー]=[転送用シート].[更新合成キー],"〇","×")
その部分だけを示されても、検証用のクエリが適切に作られているかどうか評価のしようがありません。
また[Q_単価更新用]という名前から推察した限り、UPDATE 文において呼び出されているのはテーブルではなく選択クエリのように見えますが、もし[Q_単価更新用]が選択クエリであるならば、それが具体的にどのようなクエリであるか、実際に更新対象となるのはどのテーブルであるか、そのテーブルの各フィールド(特に[更新合成キー])はどのように定義されているのか、といったことも検討すべき問題となります。
[Q_単価更新用]がテーブルではなく選択クエリであるならば、とりあえずそのクエリの SQL ビューの内容をそのまま明示して下さい。
仕入は、数値型です。
I列は、少数点の数値です。
Access 側のテーブルにおけるフィールド[仕入]のフィールドサイズ(十進型である場合は[精度]および[小数点以下保持桁数]プロパティ)はどのように設定されているのでしょうか。
もともと「
Sub 単価転送()
」とプロシージャを設定しているのにそっくりそのままコピーして実行したのではないからだというのはちょっと酷だと思いますよ単価転送
とは別のデバッグ用マクロとして示したものですので、そっくりそのままコピーして実行していただかないとむしろ困ります。少なくとも、実際に更新されたレコード件数が本当に 3 件であるならば、イミディエイトウィンドウにもそのように示されるはずであり、挙動としてあまりに不自然です。
ならば、そのように実行できるように手順を示すべきでしょう
自分の思うとおりに動いてくれなかったことの責任を相手に求めるのは良くないですよ
これは質問者であるとか回答者であるとかに関係することではありません
続く文に関しては特にhirotonが指摘している件とは無関係なのでノーコメントです