• ベストアンサー

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

前回の質問がかなり抽象的で意味がわかりずらかったと思いますので追加します。 自分なりにしらべた結果、チェックデジットの計算方法は次のとおりでした。 整数は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

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答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の先頭のシングルクォーテーションを削除してください。 質問等ありましたら、補足してください。

その他の回答 (1)

  • ykkw_2001
  • ベストアンサー率26% (267/1014)
回答No.1

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

関連するQ&A

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

    アクセスを使って整数番号を入力するときにその整理番号にチェックデジットがかかっているのですが(算式はわかりません)、入力した整数が違うと警告するようにするにはどうすればいいのでしょうか。整理番号は7桁です。 算式がわからないので解答のしようがないかもしれませんが・・・ 素人でアクセスもチェックデジットについても詳しくないのですが、分かる方がいれば教えてください。 質問の意味はうまく伝わってるでしょうか?

  • チェックディジットの効果について教えてください。

    仕入伝票、売上伝票のほかバーコード番号の下1桁には、チェックディジットが採用されていると聞きます。そしてその算出方法も奇数桁の各数字の和や偶数桁の各数字の和などから算出されているのはわかります。でも最後のチェックディジットとはいえ1ケタの数ですから入力し間違えの確率としては いつでも1/10(十分の一)で当たることにはならないのでしょうか?何万分の一でしか入力ミスがでないとか、かなりの確率で入力ミスを防げるのならこのディジットの存在意義はわかるのですが、今はこの数(ディジット)の意義がいまいちわかりません。   でたらめにこのディジットを入力しても1/10、つまり10回に1回の割合でその正確な番号にたどり着くことになると思うのですが・・・・。    お教えください。何のためにこのディジットがあって、どんな利点があるのかをわかりやすくお教えください。(計算式の説明を伺っているのではありませんのでお間違えなく・・・・・)

  • チェックデジットを付加したデータを生成したい。

    MSアクセス2000を使用しています。 アクセス初心者なので、的はずれなことも言っているかもしれませんが、よろしくお願いします。 13桁のバーコードデータを作成したいのですが、必要なのは数値だけで、バーコードそのものは必要ありません。 たとえば、12桁の商品番号と、商品名だけで構成されるデータがあったとして、商品番号からチェックデジットを計算し、新たな項目にチェックデジット付きのデータを入れてくれるような方法はないでしょうか? また、使用するソフトは、アクセスだけでなくても構いません。エクセルや他のソフトを使ってチェックデジット付の数値のみのデータを取得する方法を探しています。 よろしくお願いします。

  • チェックディジット?

    チェックディジット? 40757851-0 40757852-8 40757853-6 40757854-4 40757855-2 上記の様な番号を会社で使っているんですが 左8桁(ハイフンから左側)は 見て頂くとわかるようにただカウントしていってるだけなのですが、 一番右の1桁(ハイフンの右側)の番号にどういう規則があって算出されてるのか知りたいのです。 私なりにインターネット等でいくつかのチェックディジット? の算出方法で試しても合いません・・・ 下手な文章で分かりづらいとは思いますが、 どなたかお分かりの方教えていただけないでしょうか?

  • コード入力誤りを防止するための、チェックデジットについて

     例えば、10桁のコード入力誤りを防止するために、複雑な計算をして11桁目のチェックデジットを決めています。(それぞれの数字に、いろいろな数を掛け、その合計を11で割り、その余りを11から引いた後の数) しかし、11桁目のチェックデジットは0~9までの10個の数字ですので、間違いを発見できる確率は複雑な計算をしてもあまり変わらないのではないでしょうか?  素人ですので、わかりやすく教えてもらえればありがたいです。  わかりやすく説明されている、本でも結構です。

  • チェックデジットについて

    CIAという試験の勉強をしているのですが、以下の問題が理解できず困っています。 ご教授願います。 (問題) 入力統制のうち、元々あった数値データの加工もしくは転送中に変化していないかを確認するために、何らかの計算を施された数値データは次のどれか A ハッシュトータル B パリティチェック C 暗号化 D チェック・デジット (解答) D (解説) チェックデジットとは、ID番号末尾に追加する桁のことで、データ加工・転送等によってデータが変化していないかどうかを確認する入力統制であり、正解はD ハッシュトータルは、データ項目の合計に関連するチェックであるので、Aは誤り。 パリティチェックは、各キャラクターに1ビット分付加し、ハードウウェア内でのキャラクター転送によりこのビットが失われていないかを確認するプロセスであるので、Bは誤り。 暗号化はセキュリティー保持のための処理であり、入力統制ではないのでCも誤り。 (質問) チェックデジットは、入力エラーを防止するためのものと私は理解しています。 解説では、「データ加工・転送等によってデータが変化していないかどうかを確認する入力統制」とされています。 この点がイメージできません。 パリティチェックやハッシュトータルの方が正解になるような気がしているのですが・・ よろしくお願いします。

  • チェックデジット(M10W21)を使ったエクセルでのデータ管理

     エクセルでデータ管理していますが、チェックデジット(M10W21)を入力した管理番号をそれぞれに振りたいと思いますが何か良い計算式はありますか?  なお、400くらいのデータがありますので同一シート(例えばA1にデータ、B2にチェックデジット付きの管理番号)で処理したいんですが・・。 よろしくお願いします。

  • JANコードのチェックデジットを調査

    いつもお世話になっております。 エクセルファイルに13ケタ・8ケタのJANコードを羅列した行があるのですが、手作業で入力した為、間違っている可能性があります。 そこで、チェックデジットが合っているかを調べる数式を作成したいと思うのですが、そのようなことは可能でしょうか? また、8ケタと13ケタを1度にチェックできるでしょうか? ご存知の方がいらっしゃったら、宜しくご教授お願い致します。

  • チェックデジットについて

    CIAという試験の勉強をしているのですが、下記の問題が良くわからなくて困っています。 正解は選択肢2、3です。 選択肢2、3が正解なのは理解できました。 しかし、選択肢1がどのようなことを言っているのがイメージがつかなくて困っています。 どなたがご教授願います。 (問題) カタログ販売会社が注文とは違う商品を顧客に発送するという事態が頻発している。 多くの顧客は電話で注文をし、その注文を受けた後、オペレーターはすぐに注文システムにデーター入力している。 これが適正に行なわれない場合、この問題に対して有効な統制手続は次のどれか。 (選択肢) 1 コンピューターに、注文の連番を自動的にそれぞれの顧客注文に割り当てさせる 2 それぞれの製品番号に対し、チェック・デジットを組み込み、製品番号による入力を要求する 3 製品番号による入力を要求し、コンピューターのプログラムに製品と価格を特定させ、顧客との製品内容についての口頭での確認をオペレーターにさせる

  • クレジットカードのチェックデジットについて

    電話で自動受注をするシステムの企画をしております。 クレジットカードの番号を聞くような部分を作っているのですが、クレジットカードのチェックデジットの仕組みってどうすれば教えてもらえるか、それともそもそも非公開のものなのかご存知の方教えてください。 よく、Web上でカード番号を入力した時に、カード番号を間違えるとエラーになったりするので、どこかで申請すれば情報がもらえるのではと期待してます。 よろしくお願いします。

専門家に質問してみよう