- ベストアンサー
数字の下桁を使った抽選方法について
商店街で富くじのキャンペーンをしました。300近くある店のそれぞれに何番のくじが配布されたかのデーターはエクセルに入力してあります。(たとえば25983~32444というふうに) 組合としては,どこの店に何等が何本当たったかを把握し補助金を出そうと考えています。 1等は下四桁,2等は下三桁というように下桁の数値で当たりを設定したいのですが,たとえば下三桁の数値243を入力したら即座にどの店に何本の当たりが出たかがわかるような,関数なりうまい方法はないでしょうか。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
大事な“-1”を忘れてしまいました。b を以下のように訂正して下さい。 b =INT((25983-243-1)/1000) で,この例ですと当たりは7本ですね。また,No.1 の方の補足にある「14556~39999までの下3桁675は何本あるか」の場合,当たりは26本ですね。No.4 の方の変数名を用いて一行で書けば, 当たり本数 =INT((max-num)/1000)-INT((min-num-1)/1000) になります。なお,No.4 の方に補足ですが,このマクロでは, If (Right(i, Length(num)) = num) Then count = count + 1 この2行を分けて書くことは出来ません。分けずに一行で書くか,もし分ける場合は Endif が必要です。あと,配列も Integer よりは Long の方が良いと思います。
その他の回答 (4)
- Paul_xxx
- ベストアンサー率56% (27/48)
えーと、いろいろ考えたんですけど ちょっと難しいですね (笑) あとから思ったんですけど 25983~32444 というのは、同じセルに入力されてるんでしょうか だとしたら、ます別のセルにしないといけないと思います。 はじめに読んだときは 25983 25984 25985... みたいに入力されてるのかと思ったので最初のような回答をしましたが 範囲で入力されてるとすると多分、出来合いの関数だけでは難しいと思います。 で、ちょっと高度になりますけど ユーザ定義関数を作ってやれば割とすんなりいけると思います。 検証してないですが、以下のような感じになるかと Private Function atari_count(num, min, max) Dim count As Integer Dim i As Integer For i = min To max If (Right(i, Length(num)) = num) Then count = count + 1 Next atari_count = i End Function 引数の num というのが例でいう243、minが 配布番号の最小値 例でいうと25983 maxが同じく最大値で32444ですね。 実際に使う場合は、普通の関数と同じく呼び出せますので =atari_count(A1, C3, D3) のような感じになります。 しばらくまともにExcel使ってなくて、ちょっと目にした質問で 考え込んでしまったので、思い切り外してるかもしれません 私が思いつくのはこれでいっぱいいっぱいでした ごめんなさい もっとすばらしくスマートな解決方法を誰かが出してくれるかもです (笑)
- 38endoh
- ベストアンサー率53% (264/494)
32444 から 243 を引き,1000 で割り,その整数部分を求めます。 a =INT((32444-243)/1000) 次に,25983 から 243 を引き,1000 で割り,その整数部分を求めます。 b =INT((25983-243)/1000) 当たりの本数は a-b になります。なお,下四桁を合わせるときは,10000 で割って下さい。
- Paul_xxx
- ベストアンサー率56% (27/48)
私が思いついたのは、 Countif関数を使うか。列をひとつ追加してRight関数とオートフィルタを使うかです。 Countifの場合、店名だけ抽出したシートが別に必要になりますが 数は一発で出せます。 オートフィルタの場合、数を数えなければいけないので、多い場合は集計機能などを使うことになりますね 他にピボットテーブルを使う方法もありますが、その場合は 当選数の中から選択するという形になりそうなんで、 あまりスマートじゃないかな
補足
ありがとうございます。 当選本数を一等50本,二等100本,三等200本,4等500本というふうにとても多い上に店舗数も多く,困っています。ひとつの店舗で最低150枚の富くじを配布しますので,一つ一つの数字を対象にすることは時間がかかります。一気にいける方法はないでしょうか。あつかましい願いですみません。
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 例えばデータが下記のような場合なら、一番上にタイトル行を入れ、空いている列に RIGHT 関数を入れてコピーし、オートフィルタをかければ抽出出来ますよ。 店名 番号 下3桁 A商店 25983 =RIGHT(B2,3) B商店 25984 ↓コピー C商店 25985 ↓
補足
さっそくのご回答ありがとうございます。 ひとつの店に一枚の富くじでしたら,RITE関数で下桁を抽出するのもいい方法と思いますが,スーパーさんとかでしたら一店舗で2万枚とか出るんですよ。14556~39999までの下3桁675は何本あるかというのが,即時にわかるいい方法はないでしょうか。
お礼
おかげで,各店舗に何等が何本当たったのかを知ることができ,補助金を支払うことができました。 340店舗強について一気に必要な経費を算定でき感動的でした。 残業しないですみました。ありがとうございました。