前回の質問がかなり抽象的で意味がわかりずらかったと思いますので追加します。
自分なりにしらべた結果、チェックデジットの計算方法は次のとおりでした。
整数は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
No.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の先頭のシングルクォーテーションを削除してください。
質問等ありましたら、補足してください。
No.1
- 回答日時:
できます。
いくつか方法があるので、仮にテキストボックスを使うとして、BeforeUpdate イベントで、入力された整数値を文字列に変換して、桁数チェック、最初の桁(文字)を数値に変換して、6をかける・・・・・をやればできます。
けど逐一全部説明するのは、大変骨の折れることで、面倒なので、何か解説書を買うことをお勧めします。
具体的な入門書の名前は、別な人が回答してくれるでしょう。
>前回の質問がかなり抽象的で意味がわかりずらかったと思いますので追加します。
#前回の質問ってなに?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字3桁の組み合わせの何通り...
-
7で始まる電話番号?
-
3÷7のあまりは「3」ですか?
-
数学の階乗はどんな時に使うの...
-
2進数の割り算が分かりません...
-
エクセル:6E-05という表現は?
-
√2の値はなぜ1.414…になるんで...
-
7で割ると3余り、9で割ると4余...
-
100!
-
10進数で123を2進数で表わすと...
-
数値とアルファベットに分ける...
-
0.120は有効数字何桁ですか? ...
-
0.1と0.10の違い
-
1の位が0の時の少数第一位
-
車のナンバー
-
2進法
-
4.5×10のー3乗=?
-
モジュロ2除算ってどうやるの?
-
有効数字について 1.00×10^5÷(1...
-
「1~5の数字が書かれたカー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字3桁の組み合わせの何通り...
-
エクセル:6E-05という表現は?
-
2進数の割り算が分かりません...
-
7で始まる電話番号?
-
数値とアルファベットに分ける...
-
3÷7のあまりは「3」ですか?
-
数学の階乗はどんな時に使うの...
-
60進法と10進法
-
EXCELで10万未満切捨ての...
-
NUMBER(N,M) としたときの、格...
-
電話番号のハイフンの入れ方
-
3分の1とは何パーセントでしょ...
-
3桁の数字は何通りですか?
-
Excelで数値の丸め
-
0以下の数字は何桁?
-
エクセル関数で桁数指定し数値...
-
一億引く百が苦手なめい
-
エクセルのsumifの検索値
-
10進法の数を60進法の数に...
-
100!
おすすめ情報