OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

アクセスを使って整数を入力するときにチェックデジットで入力が違うと警告するようにするには (新

  • 暇なときにでも
  • 質問No.129910
  • 閲覧数362
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 46% (7/15)

前回の質問がかなり抽象的で意味がわかりずらかったと思いますので追加します。
自分なりにしらべた結果、チェックデジットの計算方法は次のとおりでした。
整数は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
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル13

ベストアンサー率 46% (643/1383)

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の先頭のシングルクォーテーションを削除してください。

質問等ありましたら、補足してください。
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 26% (267/1014)

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

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

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

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

#前回の質問ってなに?

このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ