誕生日にもらった意外なもの

前回の質問がかなり抽象的で意味がわかりずらかったと思いますので追加します。
自分なりにしらべた結果、チェックデジットの計算方法は次のとおりでした。
整数は6桁で一番最後の桁がチェックデジットになっています。
例えば、540838という番号なら最初の5の桁に6をかける(5×6=30)
次の桁は4に5をかける(4×5=20)次の桁は0に4をかける(0×4=0)
以下、8×3=24、3×2=6と計算し、出た答えを全部たした(30+20+0+24+6=80)80を最初に超える11の整倍数からひく(88-80=8)と最後の桁と一致すればその番号は正しく入力されていると判断できるしくみになっています。
この演算式をアクセスでデータ入力した際に、自動的に演算計算して、チェックデジットが一致していないときは、警告するようにしたいのですが、この算式をアクセスでどのように入力すればいいのかわかりません。また、そもそも、アクセスでこんな演算式を入れることができるのかもわかりません。
素人で申し訳ないのですが、わかるかたがいれば教えてください。

関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=128693

A 回答 (2件)

VBAを使った解法の例です。


数値を入力するテキストボックスのプロパティを表示し、「イベント」の「更新前処理」の値を「イベントプロシージャ」に変更した後、その右に現れる「...」をクリックしてください。

んで、出てきた画面に以下の内容を貼り付けます。
(尚、最初の行と最後の行は既に入力されているはずですので、その間の部分だけコピペしてください)

'*****ココから
Private Sub テキスト0_BeforeUpdate(Cancel As Integer)
  Dim CheckDat As String
  Dim ErrMsg As String
  Dim CD As Long
  
  CheckDat = Nz(Me.テキスト0, "") '行A
  ErrMsg = ""
  If IsNumeric(CheckDat) = False Then
    ErrMsg = "数値じゃない"
  ElseIf Len(CheckDat) <> 6 Then
    ErrMsg = "6桁じゃない"
  Else
    CD = 0
    CD = CD + (Val(Mid$(CheckDat, 1, 1)) * 6)
    CD = CD + (Val(Mid$(CheckDat, 2, 1)) * 5)
    CD = CD + (Val(Mid$(CheckDat, 3, 1)) * 4)
    CD = CD + (Val(Mid$(CheckDat, 4, 1)) * 3)
    CD = CD + (Val(Mid$(CheckDat, 5, 1)) * 2)
    CD = 11 - (CD Mod 11)
    'If CD = 11 Then CD = 0 '行B
    If CD >= 10 Then CD = CD - 10 'CDが10もしくは11のときは、CDから10を引く(一桁にする)
    'CDの判定
    If Right$(CheckDat, 1) <> CStr(CD) Then
      ErrMsg = "チェックデジットが間違ってる"
    End If
  End If
  
  If ErrMsg <> "" Then
    MsgBox ErrMsg
    'Cancel = True
  End If
End Sub
'******ココまで



また、この例では、数値データが一つのテキストボックスに入力されていることを想定しています。
もし、テキストボックスが6コ用意されているとかでしたら、行Aの内容を

CheckDat = nz(Me.テキスト0,"") & nz(Me.テキスト1,"") & nz(Me.テキスト2,"") & …

ってな感じにしてください。


また、「80を最初に『超える』11の倍数」 とのことですので、計算結果が11の倍数(Ex:88)になったときは、99-88=11とし、1の位を取って最終的なCDは1になる、としています。
つまり、前5桁が「54283」のときは、CDは1になります。
もし、「88」のときのCDを0にしたい場合は、行Bの先頭のシングルクォーテーションを削除してください。

質問等ありましたら、補足してください。
    • good
    • 0

できます。



いくつか方法があるので、仮にテキストボックスを使うとして、BeforeUpdate イベントで、入力された整数値を文字列に変換して、桁数チェック、最初の桁(文字)を数値に変換して、6をかける・・・・・をやればできます。
けど逐一全部説明するのは、大変骨の折れることで、面倒なので、何か解説書を買うことをお勧めします。

具体的な入門書の名前は、別な人が回答してくれるでしょう。

>前回の質問がかなり抽象的で意味がわかりずらかったと思いますので追加します。

#前回の質問ってなに?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!