[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『16桁の整数を7で割って余りを求めたい』(YS)
バーコード(NW−7)のチェックデジット(7チェックDR)を計算しています。 つまり、ID(1〜16桁の整数)を7で割って余りを求めるわけですが、 Excelの仕様は15桁までなので、単純にMOD(A1,7)では#NUM!となってしまいます。 苦肉の策で、下記のような式で計算していますが、もっと良い方法があればご教授下さい。
A B 1 ID チェックデジット 2 2003110400000001 5 =IF(LEN(A2)<16,A2-QUOTIENT(A2,7)*7, 3 2003110400000002 6 MOD((A2-QUOTIENT(A2,7)*7)+RIGHT(A2,1),7)) 4 2003110400000003 0 5 200311041000001 1 6 200311041000002 2 7 200311041000003 3 8 200311041000004 4
上の数字から考えるに、 上何桁かが共通なわけですよね。 (JANコードの原産国・メーカーIDのように)
(EUREKA)
アドイン無しでも以下でいけそうです。
=MOD(MOD(LEFT(A2,8),7)*10^(LEN(A2)-8)+RIGHT(A2,LEN(A2)-8),7)
もっといい方法かと言われると・・・^^;汗 (KAMIYA)
>上何桁かが共通なわけですよね。 実際に使用する場合はもちろんそうなんですが、 今回の目的はシステムの確認なので、わざと、できるだけ、バラバラにします。 桁数も、わざと違うものを作って混在させます。
>もっといい方法かと言われると・・・ いえいえ、ありがとうございます。 私のより短いし、IFを使っていないし、すっきりしてます! 早速これまでのものと差し替えて使ってみます。 (YS)
8桁以下だとエラーになってしまいますが、 それでもよかったのでしょうか? サンプルから、9桁以上と勝手に判断してしまい、
>ID(1〜16桁の整数)
を見落としていました。 (KAMIYA)
すみません、1〜8桁の場合も必要です。私も確認していませんでした。 でも、1〜8桁ならMOD(ID,7)で計算できるので、 IFを使って9桁未満・以上で分けてももいいかな、と思っています。 ありがとうございました。 (YS)
へぇへぇへぇ〜 と確認していたら、MODって対象の数値が10桁ぐらいになると #NUM!になるみたいですね。 探したら、こんなんでました。
[XL] MOD() 関数で #NUM! エラー値が返される http://support.microsoft.com/default.aspx?scid=kb;ja;119083&Product=excelJPN
A B C D E 1 2003110400000001 20031104 2 00000001 5 2 2003110400000002 20031104 2 00000002 6 3 2003110400000003 20031104 2 00000003 0 4 200311041000001 2003110 4 41000001 1 5 200311041000002 2003110 4 41000002 2 6 200311041000003 2003110 4 41000003 3 7 12345678901324567890123 123456789013245 2 67890123 4
作業列を使いますけど、1〜17桁対応です。 B1に =LEFT(A1,LEN(A1)-8) C1に =IF(ISERROR(B1),"",MOD(B1,7)) D1に =RIGHT(A1,8) E1に =IF(D1="","",MOD(C1&D1,7)) B〜D列は非表示に。 よくみるとKAMIYAさんのとほぼ同じだったりします(汗)。 違いといえば、作業列が増えたことと、1〜17桁対応ということと、 下位桁から確保すること。
1〜23桁対応にするには C1は =IF(ISERROR(B1),"",B1-(INT(B1/7)*7))
↓で真祖通りすがりの者さんが使用している名前定義の方法なら、すっきりします。 [[20031013101121]] 『スペースを入れて表示』(ななえ)
(ramrun)寝て曜日〜
>[XL] MOD() 関数で #NUM! エラー値が返される へ〜、Excelは15桁までなのに10桁程度で#NUM!になるのはなぜ?と思っていたんですが、 >MOD() 関数では、"除数" に 134,217,728 (2 の 27 乗) を掛けた値が、"数値" 以下となる場合、#NUM! エラー値が返されます。 と、いうことなんですね。 確かに、 134217728*7=939524096 MOD(939524096-1,7)=6, MOD(939524096,7)=#NUM! ですね。 納得。
>真祖通りすがりの者さんが使用している名前定義の方法なら、すっきりします。 名前定義でもうまくいきました。 ただ、難点は、実際に使う人は名前定義を全く使ったことがないので どういう計算をしているか、理解してもらうのが大変かも。
KAMIYAさんの >アドイン無しでも以下でいけそうです。 が、最初何のことかわからなかったんですが、私が使っていたQUOTIENTってアドインだったんですね。 QUOTIENTやDEC2HEXとか日常的に使っているので、 ramranさんがINTを使ってるのを見るまで忘れてました。 レス書くとき気をつけねば。
皆さん、ありがとうございました。 (YS)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.