[[20150520084756]] 『均一配分』(やっちゃば) ページの最後に飛ぶ

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

 

『均一配分』(やっちゃば)

おはようございます。
シャッフルで対応できるかな?と考えて見たのですが出来なかったのでお知恵をお貸しください。
10〜99までの二けた番号が付いた90アイテムの商品を同類が入らないように分ます。
具体的に申しますと3品に分けた場合、根菜類から一品、果菜類から一品、山菜類から一品といったように。
品数は2品から6品まで任意に変わります。
全てわけ最後の商品(半端)は不足しても構いません。
コードで表示しVLOOKUPで品名は表します。
分類は以下の通りです。
10〜19根菜類・・・ 10大 根/11春吹大根/12潰物大根/13紅大根/14からみ大根/15ミニ大根/16はねっこ大根/17葉付大根/18三浦赤大根/19人参
20〜29土物類・・・20馬鈴薯/21新馬鈴薯/22秋馬鈴薯/23黄爵馬鈴薯/24メ―クイン/25馬鈴薯(エラブゴールド)/26雪蔵馬鈴薯/27きたあかり/28男爵馬鈴薯/29新里芋
30〜39葉茎菜類
40〜49果菜類
50〜59豆科野菜類
60〜69きのこ類
70〜79香辛つま物類
80〜89山菜類
90〜99果実

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


 各分類の頭から順に取り出して行けばいい様な気がするんですけど、

 4品の場合なら
  10,20,30,40
  50,60,70,80
  90,11,21,31
  ::
  
 それじゃダメなんですか?
 他にまだ説明されていない条件でもあるんでしょうか?

(半平太) 2015/05/20(水) 11:56


半平太さん
そうですねぇー
朝が早いのでぼけています。
気づきませんでした。

(やっちゃば) 2015/05/21(木) 08:39


半平太さんのご指摘を頂きやっているのですがわからないことがでました。
M3のセルに"B3:J3"この様に書きました。
コードには Range(Range("M3")).Selectこの様に書きました。
するとRangeメソッドは失敗しましたのエラーが出ます。
どこの書き方が悪いのでしょうか?、教えていただけると助かります。

(やっちゃば) 2015/05/21(木) 09:11


 >そうですねぇー 
 >朝が早いのでぼけています。 
 > 気づきませんでした。 

 あれ? 本当にそうなんですか?

 あの後、「均一配分」「シャッフル」とかの意味やハンドルネーム(やっちゃば)から推測して、
 バラエティに富んだ野菜類の山盛りを沢山作りたいのかなぁ、なんて思っていたのですけど。

 上の案だと、いつもそばにある分類同士でくっついてしまいます。

 >M3のセルに"B3:J3"この様に書きました。 
 >コードには Range(Range("M3")).Selectこの様に書きました。 
 >するとRangeメソッドは失敗しましたのエラーが出ます。

 可能性としては、
 1.そのコードはシートモジュールに書いたが、実行する時、別のシートを前面にしていた。
 2.M2セルにダブルクォーテーションマークも付けて「"B3:J3"」とそのまんま書いた

(半平太) 2015/05/21(木) 09:45


半平太さん ご指摘を頂き助かりました。
" "が多かったためでした。

バラエティに富んだ野菜類の山盛りを沢山作りたいのかなぁ 想像の通りです。
横のシャッフル後に、縦のシャッフルを行いできるかと思っていたのですがお勧めはありますか?

(やっちゃば) 2015/05/21(木) 10:11


 >お勧めはありますか
 お勧めできるほどのものはないですが、
 こんな展開になるかも知れないと思って、しどろもどろに検討したものはあります。

 まだ、アップできる状態ではないので、整理できたらアップします。

(半平太) 2015/05/21(木) 10:24


 「処理」シートを新規に挿入して、シート見出しを右クリックして「コードの表示」を選ぶと
  シートモジュールが表れますので、後記コードを貼り付けてください。

 M2セルに品数(2〜6)を入力してから、上記マクロ(Grouping)を実行してください。
 結果はO(オー)列の品名以下に表示されます。

 <処理> 結果例
  行 _____A_____ ___B___ __C__ _____D_____ __E__ ____F____ ____G____ _____H_____ __I__ __J__ __K__ ___L___ _____M_____ ____N____ _____ O _____
   1 RAND        コード  10台  修正RAND    Rank  修正Rank  採用Item  結果コード  抽出  10台  分類  採用数  品数        グループ       品名         
   2 0.311611117     10    10  0.311611117   31                   1          14    68    60    10      10      4         1       14からみ大根 
   3 0.503145566     11    10  0.503145566   23                   1          24    54    50    20      10  セット総数            24メ―クイン 
   4 0.854127938     12    10  0.854127938   10                   1          56    49    40    30      10      22                56豆科07     
   5 0.342892096     13    10  0.342892096   28                   1          97    37    30    40      10                        97果実08     
   6 0.972051288     14    10  0.972051288    1                   1          67                50      10                 2      67きの08     
   7 0.695476094     15    10  0.695476094   17                   1          74                60      10                        74香辛05     
   8 0.327110815     16    10  0.327110815   30                   1          87                70      10                        87山菜08     
   9 0.329114533     17    10  0.329114533   29                   1          40                80       9                        40果菜01     
  10 0.778277822     18    10  0.778277822   12                   1          30                90       9                 3      30葉茎       
    :                                 :                             :

 但し「品名リスト」シートは以下の構成になっているものとします。

 <品名リスト> サンプルデータ
  行 __A__ _____B_____ ____C____ _____D_____ _____E_____ ______F______ ______G______ ___________H___________ _______I_______ ______J______ ______K______ ____L____
   1 大台  分類        Item01    Item02      Item03      Item04        Item05        Item06                  Item07          Item08        Item09        Item10   
   2   10  根菜類      10大根    11春吹大根  12物大根    13紅大根      14からみ大根  15ミニ大根              16はねっこ大根  17葉付大根    18三浦赤大根  19人参   
   3   20  土物類      20馬鈴薯  21新馬鈴薯  22秋馬鈴薯  23黄爵馬鈴薯  24メ―クイン  25馬鈴薯(エラブゴールド)  26雪蔵馬鈴薯    27きたあかり  28男爵馬鈴薯  29新里芋 
   4   30  葉茎菜類    30葉茎    31葉茎      32葉茎      33葉茎        34葉茎        35葉茎                  36葉茎          37葉茎        38葉茎        39葉茎   
   5   40  果菜類      40果菜01  41果菜02    42果菜03    43果菜04      44果菜05      45果菜06                46果菜07        47果菜08      48果菜09      49果菜10 
   6   50  豆科野菜類  50豆科01  51豆科02    52豆科03    53豆科04      54豆科05      55豆科06                56豆科07        57豆科08      58豆科09      59豆科10 
      :                                        :                               :

 ’処理シートのシートモジュールに貼り付けるコード
 Sub Grouping()
     Dim DTI, DTL
     Dim timesToTry As Long
     Dim cellToWrite As Range
     Dim cellToWrite2 As Range
     Dim NN As Long, KK As Long
     Dim idx As Long
     Dim minNum As Long
     Dim rowExtracted As Long
     Dim WSF As WorksheetFunction

     Range("A1:G1").Value = [{"RAND","コード","10台","修正RAND","Rank","修正Rank","採用Item"}]
     Range("H1:O1").Value = [{"結果コード","抽出","10台","分類","採用数","品数","グループ","品名"}]
     Range("M3").Value = "セット総数"

     Set WSF = WorksheetFunction
     If Range("M2").Value < 2 Or 6 < Range("M2").Value Then
         MsgBox "M6セルに「2〜6」の数値を入力してから実行してください"
         Exit Sub
     End If

     Application.ScreenUpdating = False
         Range("L2:L10").ClearContents
         Range("G2:H91").ClearContents
         Range("N2:O91").ClearContents
         Range("I2:I8").ClearContents

         Range("B2").Value = 10
         Range("B2").AutoFill Destination:=Range("B2:B91"), Type:=xlFillSeries

         Range("A2:A91").FormulaLocal = "=RAND()"
         Range("A2:A91").Value = Range("A2:A91").Value '固定化
         Range("C2:C91").FormulaLocal = "=FLOOR(B2,10)"
         Range("D2:D91").FormulaLocal = "=IF(COUNTIF($J$2:$J$7,C2),"""",A2)"
         Range("E2:E91").FormulaLocal = "=IF(D2="""","""",RANK(D2,D$2:D$91))"
         Range("F2:F91").FormulaLocal = "=IF(OR(E2="""",G2=1),"""",LOOKUP(C2,$K$2:$L$10)*100+E2)"
         Range("J2:J8").FormulaLocal = "=IF(I2="""","""",FLOOR(I2,10))"

         Range("K2:K10").Value = [{10;20;30;40;50;60;70;80;90}]
         Range("B2").AutoFill Destination:=Range("B2:B91"), Type:=xlFillSeries

         Range("M4").FormulaR1C1Local = "=INT(90/R2C13)"

         DTL = Range("L2:L10").Value
         timesToTry = Range("M4").Value
         For NN = 1 To timesToTry

             Range("I2:I7").ClearContents
             For KK = 1 To Range("M2").Value
                 Set cellToWrite = Range("I200").End(xlUp).Offset(1)
                 rowExtracted = WSF.Match(WSF.Min(Range("F2:F91")), Range("F2:F91"), 0) + 1
                 cellToWrite.Value = Cells(rowExtracted, "B")
                 Cells(rowExtracted, "G").Value = 1
                 idx = Int(cellToWrite.Value / 10)
                 DTL(idx, 1) = DTL(idx, 1) + 1
             Next KK
             Set cellToWrite2 = Range("H200").End(xlUp).Offset(1)
             cellToWrite2.Resize(Range("M2").Value).Value = Range("I2:I7").Value
             Range("L2:L10").Value = DTL
         Next NN
         Range("L2:L10").Value = DTL

         Range("N2:N91").FormulaLocal = "=IF(H2="""","""",IF(MOD(ROW()-2,$M$2)=0,ROUNDUP(ROW()/$M$2,0),""""))"
         Range("O2:O91").FormulaLocal = "=IF(H2="""","""",INDEX(品名リスト!$C$2:$L$10,INT(H2/10),MOD(H2,10)+1))"
     Application.ScreenUpdating = True
 End Sub

(半平太) 2015/05/21(木) 12:08


半平太さん
力作をありがとうございます。
現状に当てはめて動かしてみました。
うーんすごいです。検討してみます。

(やっちゃば) 2015/05/22(金) 08:57


コメント返信:

[ 一覧(最新更新順) ]


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