- ベストアンサー
JANコードのチェックデジットを調査
いつもお世話になっております。 エクセルファイルに13ケタ・8ケタのJANコードを羅列した行があるのですが、手作業で入力した為、間違っている可能性があります。 そこで、チェックデジットが合っているかを調べる数式を作成したいと思うのですが、そのようなことは可能でしょうか? また、8ケタと13ケタを1度にチェックできるでしょうか? ご存知の方がいらっしゃったら、宜しくご教授お願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
チェックデジットを数式に変えて判定するということですよね? 簡単なことだと思いますが。 8桁と13桁の違いは対象のレングス(文字列長)を判定して式を分岐させればいいですし、特に難易度は高いとは思えません。 とりあえずVBの例がここにあります。 http://www.ruriplus.com/msaccess/tch/tch_049.html ExcelのVBAにするのにはそんなに違いはないでしょう。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>数式で一度に行うということは可能でしょうか エクセルの通常の関数式では出来ません。複雑になりすぎると言うのが正しいでしょうが。 #1のご回答のようなことを、関数式でやろうとすると 関数のネストが深くなり過ぎて、手におえないでしょう。 そこでユーザー定義関数を作るのが、この場合適当でしょう。 >VBは初心者で、エクセルのVBA以外の知識は殆どないもので・ VBAだって、そう甘いものやおまへんで。 VBAのユーザ定義関数を作るのポイントは、シートのセルには、=JAN8(A1)のように,引数にセル番地を入れ、VBEの標準モジュール(必ず標準モジュール)には Function jan8(a) (aをセルに入っている数や文字列として扱う、すなわち演算する) End Function とします。JAN8としたのは、JAN13と関数を分けられれば分けた方が、2モジュールになるが、考えやすいかと思いました。各行に混合しておれば、1つの関数にして、#2のご回答のように、Case分で分けざるを得ません。
お礼
了解です。 この辺まで複雑な計算になると、ユーザー定義関数の領域ということですね。 mld_sakuraさんに教えていただいたURLを参考にがんばってみます。 ご親切にありがとうございました。
- S-Fuji
- ベストアンサー率36% (592/1624)
データ=4912345?の場合(?=cd) 5+3+1+4=13(偶数桁を足す) 13x3=39 (それに3を書ける) 4+2+9=15 (奇数桁を足す) 39+15=54 (両方を足す) 54の下一桁を取り出し 10-4=6 (10から下一桁を引く) チェックディジットは6 (ゆえに) 49123456 がコード 13桁の場合も同じ
お礼
補足の質問に対してimogasiさんより回答がありました。 数式では、難しいみたいですね。 何とかユーザー定義関数を組み立てていきます。 ありがとうございました。
補足
早速ありがとうございます。 こちらの算出方法を、数式で一度に行うということは可能でしょうか?
お礼
ありがとうございます。 何分VBは初心者で、エクセルのVBA以外の知識は殆どないもので・・・。 いただいたURLの情報は、関数を作成するというものですね。自分で試してみたことはないのですが、頼ってばかりですと成長できないので、こちらを参考に何とか組み立てていきます。