再びmaruru01です。
すでにimogasiさんが変換プログラムを出しているのでなんですが、補足要求した手前、載せます。
なお、Access2000で作りました。
Public Function ChangeFromD(Num As Long, n As Long) As String
Dim temp() As Long
Dim a As Long
Dim i As Long
Dim str As String
ReDim temp(n - 1)
a = Num
str = ""
For i = 0 To n - 1
temp(i) = a Mod 32
a = Int(a / 32)
str = Change32(temp(i)) & str
Next i
ChangeFromD = str
End Function
Public Function Change32(Num As Long) As String
Const ChangeStrings As String = "123456789ABCEFGHJKLMNPRSTUVWXYZ0"
If Num = 0 Then
Change32 = Mid(ChangeStrings, 32, 1)
Else
Change32 = Mid(ChangeStrings, Num, 1)
End If
End Function
ChangeFromD関数の第1引数に10進数を、第2引数に32進数の桁数(今回は4)を入れて使用します。
それから、Accessでのやり方ですが、テーブルに例えば[10進数シリアル]という数値型のフィールドを作成して、ここで10進数のシリアルをユニークで管理するという方法が簡単だと思います。
フォームには10進数シリアルに対応するコントロールを置いておきますが、非表示にしておきます(入力ユーザーには必要ない情報なので)。
新規レコードの場合は、DMax関数で最大値を取得してそれに+1した値を、上記のChangeFromD関数に入れて32進数文字列に変換し、それをフォームに表示すればいいでしょう。
ちなみにDMax関数は、
MaxVal = DMax("10進数シリアル", "テーブル名")
という風に使用します。
したがって、新しい32進数文字列は、
Serial32 = ChangeFromD(MaxVal + 1, 4)
となります。
もちろん、非表示にした10進数シリアルのコントロールには、MaxVal+1に値をセットします。
ところで、自動採番は最大値+1でいいのですか。
例えば、あるレコードを削除して欠番になったシリアルを新しいレコードに使いまわすということはないのでしょうか。
これがあると、採番方法がちょっと面倒になりますが。
お礼
回答有難う御座います。 誠に残念では有りますが、私のスキルではAccessでの作成は困難と判断し、 今回はタイムアップの為、自動採番を見送らせて頂きました。 (今日中に作らなくてはならないので) よって、実際の使用ファイルとは別に、引き続き勉強したいと思います。 大切なご回答はメモを取り、次回に生かしたいと思います。 本当に有難う御座いました。
補足
有難う御座います。 早速エクセルで試したら1~65300セルまでびっしりと希望の32進数が並びました! 後は現在の行番号を読み取り、前のシリアルに+1するような加工が必要ですね。 今日はタイムアップなので明日再度挑戦したいと思います。 何か嬉しくなってきました。 もしかしたら明日再度質問するかも知れませんがどうぞ宜しくお願い致します。