Access VBA質問箱 IV

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

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


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

【10348】36進数の文字列を10進数へ変換するには Access_Face 08/5/5(月) 10:45 質問[未読]
【10350】Re:36進数の文字列を10進数へ変換するには YU-TANG 08/5/5(月) 15:12 回答[未読]
【10351】Re:36進数の文字列を10進数へ変換するには Access_Face 08/5/5(月) 22:36 質問[未読]
【10352】Re:36進数の文字列を10進数へ変換するには YU-TANG 08/5/6(火) 2:45 回答[未読]
【10353】Re:36進数の文字列を10進数へ変換するには Access_Face 08/5/6(火) 21:41 お礼[未読]

【10348】36進数の文字列を10進数へ変換するには
質問  Access_Face  - 08/5/5(月) 10:45 -

引用なし
パスワード
   おはようございます。
 Accessの関数を調べましたが、36進数から10進数への変換関数は見付からない
です。知っている方がいましたら、
ぜひぜひ、教えてください!!
他の方法でもご伝授ください。
よろしくお願いします。

【10350】Re:36進数の文字列を10進数へ変換するには
回答  YU-TANG  - 08/5/5(月) 15:12 -

引用なし
パスワード
   ▼Access_Face さん:
> Accessの関数を調べましたが、36進数から10進数への変換関数は見付からない
>です。

日本語なら「基数変換」でググれば数万件、英語なら「radix base convert」
あたりで数十万件、リソースがヒットします。
その中から好きなのを選べばよいでしょう。

たとえばこちらなどはいかがですか。
www.accessclub.jp/bbs5/0025/vba7622.html

【10351】Re:36進数の文字列を10進数へ変換するには
質問  Access_Face  - 08/5/5(月) 22:36 -

引用なし
パスワード
   YU-TANGさん

回答をいただき、ありがとうございます。早速やってみましたので、結果を
報告します。なんか結果がただしくないようです、その原因はなんでしょうか?
ご指導ください。

クエリの中に、8桁の文字列を使って、

文字列   変換値:fncTemp([文字列],8)
ABCDEFGH  24309841 ・・・・>36進数ABCDEFGHからの10進数結果ではない


Function fncTemp(ByRef Num As String, ByRef BaseNum As Long)
Dim strList As String
Dim lngResult As Long
Let strList = "0123456789ABCDEFG...Z"
Dim IDX As Long
For IDX = 1 To Len(Num)
Let lngResult _
= lngResult _
+ (InStr(1, strList, Mid(Num, IDX, 1), vbBinaryCompare) - 1) _
* BaseNum ^ (Len(Num) - IDX)
Next
Let fncTemp = lngResult
End Function

【10352】Re:36進数の文字列を10進数へ変換するには
回答  YU-TANG  - 08/5/6(火) 2:45 -

引用なし
パスワード
   ▼Access_Face さん:
>文字列   変換値:fncTemp([文字列],8)
>ABCDEFGH  24309841 ・・・・>36進数ABCDEFGHからの10進数結果ではない

えーと、コードをちゃんと読まれましたか?
第二引数の BaseNum (基数) に 8 を渡しているので、8 進数
からの変換になっているだけのように見えますが。
リンク先にも書いてあったように、エラー処理をしていないので
この場合は何が返ってきても不思議ではありません。
エラー処理は利用する側で実装する必要があります。

また、この関数を使って「36進数ABCDEFGHからの10進数」を
求めようとするなら、おそらく Long 型の範囲を超えますから、
オーバーフローを起こすと思いますよ。
どのみち、そのままは使えないでしょう。

あと、まさかとは思いますが、

>Let strList = "0123456789ABCDEFG...Z"

これは実コードのほうでは修正されてますよね??
念押しするほうが失礼かもしれないので書きにくいですが、
リンク先で上のように書いてあるのは、Z まで書くのが(おそらく)
面倒だったから「...」と省略しただけで、実際のコードでは(リンク
先のスレ先頭の質問文を見れば分かるとおり)省略なしできちんと
アルファベットを網羅しないと、まともな結果は返ってきません。
それは承知の上で、掲示板上だけ修正前のコードを貼ったという
ことでしたら(そうする意味はよく分かりませんが…)、流して
ください。


もしくは、処理速度を求めないなら、下の関数(手抜きですが)を
使ってください。

Function Base36ToDec(ByRef sNum As String)
  With CreateObject("ScriptControl")
    .Language = "JScript"
    Base36ToDec = .Eval("parseInt('" & sNum & "',36)")
  End With
End Sub

それでは。

【10353】Re:36進数の文字列を10進数へ変換するには
お礼  Access_Face  - 08/5/6(火) 21:41 -

引用なし
パスワード
   こんばんは
 さっそくですが、使わせていただきました。
速度はまったく遅いとは感じなくて、約34,000件のレコ−ド(テーブル)を基に
して、クエリに関数を入れ、実行したら、一秒もかからなくて、すぐ計算が終了しましたうよ。計算(変換)結果も正確で、本当にありがとうございました。
 でもそのまま使っては申し訳ありません、コードの意味を吸収しながら、自分の
応用力をアップしたです、またよろしくお願いします。

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