hatena
hatena
2023/10/22 (日) 18:06:47
オートナンバー型を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
これで新規レコード入力時に、重複しない伝票番号が発行されます。
通報 ...