[[20151027070501]] 『宅配便の連続紙送り状問い合わせ番号入力が正しい』(安針) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『宅配便の連続紙送り状問い合わせ番号入力が正しいかチェックしたい』(安針)

某大手宅配便の連続紙送り状の問い合わせ番号が、
12桁の数字で、下一桁が0〜5なら11を足し、6なら4を足すことで、次の送り状番号になっているようだという事に目を付けて、
手入力した問い合わせ番号に間違いがないかのチェックをするファイルを作っています。

その日入力した問い合わせ番号で一番小さなものをMINで探して、MODで出した下一桁の数字をもとに(2007の場合は桁数不足で一度ではできないので100万の位で区切ってます)、法則にしたがった数字を足す作業列を千行ほど作って、これにCOUNTIFで対応するものがあるかどうかという方法で、連続している状態であれば問題なく動くものを作ることはできたのです。

が、別の束になると大幅に番号がずれてしまうため、作業列を仮想的なものにすることができないか、という相談です。

現状は、束切り替えという形でエラーになったもので一番小さな数字をMINで探して、そこから法則にしたがってという方法をとって一回分は対応しているのですが、
何個もの束にまたがってとなると、際限なくなるためいい方法がないかと思いまして、知恵をお貸しいただければと。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 よーわからん。束ってなんやねん的。

 一応。
 12桁なら桁数不足にならんのでは?
 MODが悪さしてるんすかね? ならRIGHTでいいんでないの?
(GobGob) 2015/10/27(火) 07:37

 色々、疑問点が出るのですが・・・・
 (具体例があれば考え易いのですが、問題の性格上、サンプルは作りにくいのでしょうか)

 >12桁の数字で、下一桁が0〜5なら11を足し、6なら4を足すことで、
 1.下一桁に「7〜9」は無いと言うことですね?

 >その日入力した問い合わせ番号で一番小さなものをMINで探して
 各束の一番小さなデータは常に正しい(万一それを入力ミスした場合は誤判定しても諦める)
 と云う前提でよろしいですね?

 >2007の場合は桁数不足で一度ではできないので100万の位で区切ってます)
 2.桁数に限っては、2007が特殊とは思えないのですが、
 エクセルの有効桁数は15なので、それより3桁も少ない12桁で本当に桁数不足になるのでしょうか?

 MODを使う必要性もよく分からないのですけど。(右から一桁切り取れば済むと思うのですけど)

 3.今まで、束の数の最多は何個でしたか?

 4.検査目的の送り状番号は、どんな状態(レイアウト上の位置)で入力されているのですか?
   昇順に並べ替えると云うような手段はとれないのですね?

 >作業列を仮想的なものにすることができないか
 5.作業列を仮想的なものにすると云う意味がイメージ出来ないです。

 6.正しい/正しくない、と云う判定結果はどう出ればいいのですか?

(半平太) 2015/10/27(火) 08:13


 桁数不足はGobGobさんの言うとおりMODの制限じゃないかな。

 =MOD(数値,除数)
 で除数*134217728<=数値の時に#NUM!となる。

 たとえば除数が10の場合、数値が1,342,177,279までしか計算できないようだ。

 もっともこれは2007までで2010の場合は除数が10の場合、数値が11,258,999,999,999まで計算できるようだが
(ねむねむ) 2015/10/27(火) 10:30

伝票番号は、12桁で構成されており、最終桁はチェックデジットとなります。
なので、正味11桁+チェック用1桁で12桁という構成です。
チェックデジットは、前11ケタを7で割った余りとなります。

また、大手の業者3社(クロネコヤマト、佐川急便、日本郵便)は同体系です。

1234-4567-101x xはチェックデジット
1234-4567-102x
1234-4567-103x

      :
      :
1234-4567-998x
1234-4567-999x

4321-7654-101x
4321-7654-102x

      :
      :
4321-7654-998x
4321-7654-999x
(飛脚猫) 2015/10/27(火) 14:43

>GobGobさん
ねむねむさんの言われるように、MOD関数の2007における制限のようです。
私自身、自宅PCは2013ですので、自宅ではできるのになぜ職場ではできないのかと悩んで、応急処置としてやっていました。
RIGHT関数は勘違いしており、RIGHT(A2,1)=6 で下一桁を6かどうかを判定しようとしてうまくいかないとやっていました。
実際には、="6" と文字列にしないといけなかったと、今日の昼間に気付きました。

>半平太さん
1.飛脚猫さんの言われるとおりの法則のため、結果的にですが7の除数の余りには、7〜9が存在しなかったようです。
一番小さいものが間違えている場合は、他がエラーになるので、それで判断していました。
2.前述の通りの次第です(汗)
3.束自体は、通常千枚で1束です。
一番多くても350枚ぐらいしか一日には使用しないため、今までは一回切り替えれば問題ありませんでした。
ただ今回、2000枚一度に頼んだところ、10枚の束を200束持ってくるという事をされてしまったため、これをチェックするのにどうすればいいのか、となったのが今回の質問のきっかけです。
4.個人的なチェックで12桁の数字を200件以上チェックするのに楽しようというファイルですので、昇順並べ替え自体はできます。
ただ、問い合わせ番号よりも他の番号を重視したほうが、他のチェック作業がやりやすいって程度の話です。
5.実際にできるかはわかってないのですが、作業列がなくとも何万件レベルで自動的に数があるかどうかのチェックができればとイメージしてました。
6.現状は、OKとNGで出してました。

>ねむねむさん
そういう理屈なのですね。
ありがとうございます。

>飛脚猫さん
そういう法則なので、結果的に私の気づいた法則も同時に成立するって話なんですね。
あくまで、結果的にというだけで。

一応は、当座としてこの番号に合致するかを求めればという事で……でも、結局MOD関数は11桁では使えないので、
=IF(A2="","",IF( LEFT(A2*1,11)*10+IFERROR((ROUND(MID(LEFT(A2,11)/7,12,2)*0.07,0)),0)=A2*1,"OK","NG"))
という計算式をでっちあげて使う方向で行きます。
ありがとうございます。

もっとも、他の番号とリンクしてある方のチェックも可能ならばしたいのですが。

(安針) 2015/10/27(火) 22:13


 >結局MOD関数は11桁では使えないので、 
 >=IF(A2="","",IF( LEFT(A2*1,11)*10+IFERROR((ROUND(MID(LEFT(A2,11)/7,12,2)*0.07,0)),0)=A2*1,"OK","NG")) 

 入れ子にすればMODも使えると思います。
 例: B2セル =IF(A2="","",IF(MOD(MOD(INT(A2/10),7000000),7)-RIGHT(A2)=0,"OK","NG"))

 >昇順並べ替え自体はできます。 
 昇順に出来るなら、こんなのでイレギュラーのチェックが出来るのではないかと思います。

 (1) B1セル =TEXT(COUNTIF(C:C,"単発"),"[>0]0件単発あり;;単発はゼロ")
 (2) C2セル =IF(A2="","",IF(OR(INT(A2/10)-1=INT(N(A1)/10),INT(A3/10)-1=INT(A2/10)),"","単発"))
   下にコピー

 <結果図>
 行  _______A_______  _____B_____  ______C______
  1  番号(昇順)       1件単発あり  連番チェック 
  2  123,445,671,016  OK                        
  3  123,445,671,020  OK                        
  4  123,445,671,031  OK                        
  5  123,445,679,980  OK                        
  6  123,445,679,991  OK                        
  7  123,445,680,013  OK           単発         
  8  432,176,541,016  OK                        
  9  432,176,541,020  OK                        
 10  432,176,549,980  OK                        
 11  432,176,549,991  OK                        

(半平太) 2015/10/27(火) 23:48


>半平太さん
実際の環境で試して、うまくいきました。
ありがとうございます。

余りを求めるものであるならば、それで十分なんですね。
想像もしてませんでした。

参考までにですが、;;の意味は何なのでしょうか?
ネット検索すると、書式のユーザー定義に使用する場合がある記事を見かけたのですが、
今回の場合は、違いますよね?
(安針) 2015/10/28(水) 20:52


 >参考までにですが、;;の意味は何なのでしょうか? 

 ありゃ、よく見たらほめられたもんじゃなかったです。(^^ゞ

 通常の書式設定では、プラス;マイナス;ゼロ;文字 とやります。

 今回は通常と同じなんですから、その通りに
  "0件単発あり;;単発はゼロ" とすれば良かったです。

  ※マイナスはあり得ないのでどうでもいいので、
     一番シンプルな「空白」になる書式として→「;;」の中間を省略している訳です。

 [>0]の指定は、ゼロ超(つまりプラス・・・とほほ)の場合は、、の意味です。
 [>10]とかだったら意味ある括弧だったのですが。

 >今回の場合は、違いますよね?
 いえ、そういう事情で同じなんです。
 ググってみてください。数値条件を指定して表示する方法がありますので。

(半平太) 2015/10/28(水) 22:52


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.