Microsoft Access 掲示板

ランダムな数値を作る方法 / 5

5 コメント
views
4 フォロー
5

オートナンバー型を0000-0000-ランダムな英数4桁に加工するのは面倒そうなので、
エクセルと同様の方法で生成して重複チェックをして発番する方法を考えてみました。

まずは、BASE関数に相当するものがAccessにはないので、それを自作します。
標準モジュールに下記の関数を作成します。

Function MyBase(数値 As Long, 基数 As Long, 桁数 As Long) As String
    Const num = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Dim q As Long   '商
    Dim r As Long   '余り

    If 基数 <= 1 Or 基数 > 36 Or 数値 < 0 Then
         Exit Function
    End If

    q = 数値
    Do
        r = q Mod 基数
        q = q \ 基数
        MyBase = Mid(num, r + 1, 1) & MyBase
    Loop While q > 0

    MyBase = Right(String(桁数, "0") & MyBase, 桁数) 
End Function

入力フォームの挿入前処理に下記のコードを設定する。

Private Sub Form_BeforeInsert(Cancel As Integer)
    Randomize
    Dim DNum As String    
    Do
        DNum = Format(Int(Rnd * 99999999), "0000-0000-") & MyBase(Rnd * 1679615, 36, 4)
    Loop Until IsNull(DLookup("伝票番号", "テーブル1", "伝票番号='" & DNum & "'"))
    Me.伝票番号 = DNum
End Sub

これで新規レコード入力時に、重複しない伝票番号が発行されます。

通報 ...