Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


72 / 2272 ツリー ←次へ | 前へ→

【13128】ACCESS2010のVBA64ビットについて pesan 16/12/8(木) 22:12 質問[未読]
【13129】Re:ACCESS2010のVBA64ビットについて 亀マスター 16/12/9(金) 21:42 発言[未読]

【13128】ACCESS2010のVBA64ビットについて
質問  pesan  - 16/12/8(木) 22:12 -

引用なし
パスワード
   32ビットのACCESS2010で作成したアプリケーションを64ビットのACCESS2010で動かすと想定した結果が返ってきません。

VBAスクリプトの抜粋です。

(渡した引数の上位2桁を判断させ、条件によって文字列の編集をする処理です)
--------------------------------------------------------------
Private Function syori1(AAA) As String
Select Case Left(AAA, 2)
 Case "01" To "50": syori1 = "111" & AAA
 Case "51" To "99": syori1 = "222" & AAA
 Case Else: syori1 = ""
End Select
End Function
--------------------------------------------------------------
AAAには「6060」が入っているとします。(AAAの値は確認しました)
32ビットでは、戻りが、「2226060」になりますが、64ビットだと「」(Elseに分岐します)になります。
32ビットと同じ結果を返すにはどういった対応が必要になりますか?

いろいろと調べてみたのですが、解決できなかったので
よろしくお願いします。

【13129】Re:ACCESS2010のVBA64ビットについて
発言  亀マスター  - 16/12/9(金) 21:42 -

引用なし
パスワード
   手元に64bit版のOfficeがないのでなんとも言えませんが、32bit版のExcel 2013とAccess 2013で試したところ、ちゃんと機能しましたね。

ところで、この現象の原因とは関係ないかもしれませんが、このコードでは文字列と数値の区別がついていないようで、不具合が出そうだなという印象を持ちました。

AAAは数値を入れるのだと思いますが、Left関数の第1引数は文字列です。AAAの上位2桁を抽出したいということであれば、数学的に計算するのが適切かと思います。(IDなどで文字列として扱うものだとしたらすみません)

あと、Select Caseで"01" To "50"のような書き方をしていますが、これは数字として1〜50の範囲を指定するのだとしたら不適切です。
この書き方では数字としての意味は一切なく、文字列として辞書的配列に従って判断されることになります。
今回はLeft関数で2文字を引っ張ってるので問題にならないでしょうが、もし6〜9の数字を1桁表記にしたものを指定したら、1〜50ではなく51〜99の方に該当していまいますよ。

72 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078186
(SS)C-BOARD v3.8 is Free