• 締切済み

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

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

エクセルの達者でチェックデジット経験者がいればよいが、この質問コーナーを見ている人というのは(現役は忙しいから)あまり期待できないと思う。 だから、もう少し丁寧に、エクセル向けに課題を質問で解説すべきと感じた。 もうひとつ (1)CD除きの数字から計算するのか (2)既に入力済みの数字をチェックするのか、 質問が明確でない。(2)と仮定して ーーー http://www.aimjal.co.jp/gizyutu/barcode/nw-7.htm チェックディジット計算では (1)ウエイトがけ (2)桁ごと加算 (3)MODを求める (4)10の補数?10より引く。 (2)はMOD関数あり (1)(2)について、(CDでない場合で、数字が1桁ごとにセルごとに分かれているケースだとSUMPRODUCT関数などあるが、) (A)1桁づつに分けるのが、式が長くなる。 (B)桁数により(本例では固定桁かも)先頭から2,1、2,1のウエイトだったように思うので、処理が難しくなりそう == 結論として、CDの計算は、VBAで ユーザー関数を作るのが良いと思う。 下記は、俄か作りの、能力不足なので、良くチェックしてください。 大体のイメージ。MsgBoxは途中チェック用ですから、削除可。 Function cd(a) s = a s = Left(s, Len(s) - 1) ' MsgBox s t = 0 w = Array(0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1) 'MsgBox w(1) For i = 1 To Len(s) 'MsgBox Mid(s, i, 1) & " " & w(i) v = Mid(s, i, 1) * w(i) For j = 1 To Len(v) t = t + Mid(v, j, 1) Next j Next i ' MsgBox t x = t Mod 10 x = 10 - x ' MsgBox x cd = x End Function シートのA2に=LEFT(A1,LEN(A1)-1)&cd(A1) 上記のサイトの例の 876543212の例(最後の2はCD) で 876543212 でCD2は一致。

関連するQ&A