同じグループに含めないようにするための考え方 | |
---|---|
[194836] 同じグループに含めないようにするための考え方- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ コロン -(2022/04/22(19:50)) □U R L/ お世話になります。 Sheet2のA列には通番、B列には名前が30人分入っているとします。C列に乱数を発生させて、Sortを使って並べ替えをします。その結果を上から順番にSheet1に貼り付けます。 貼り付け方はA2から縦に5名、B2から縦に5名、C2から縦に5名、D2から縦に5名、E2から縦に5名、F2から縦に5名、以上6つのグループを作ります。 やりたいことは、通番5と通番10が絶対に同じグループにならないようにするためのコードの考え方をわかりやすく教えていただけますでしょうか。 |
[194837] Re[1]: 同じグループに含めないようにするための考え方- ■記事引用/メール受信=OFF■ □投稿者/ ax -(2022/04/22(20:50)) □U R L/ 乱数は10〜40で振る 通番5は1、通番10は50 ソート、貼り付け シート1で列と行をシャッフル |
[194838] Re[2]: 同じグループに含めないようにするための考え方- ■記事引用/メール受信=OFF■ □投稿者/ にさんがくろ -(2022/04/23(07:10)) □U R L/ 単純にソート後に連番を比較し、差>5 かを確認。 真ならやり直す。 差が1の場合でもグループが分かれる場合(5,6)もあるが、 気にしない、どうせ乱数なのだから。 これが一番簡単。 |
[194839] Re[3]: 同じグループに含めないようにするための考え方- ■記事引用/メール受信=OFF■ □投稿者/ コロン -(2022/04/23(07:53)) □U R L/ にさんがくろ様、ax様 早速のお返事ありがとうございます。sheet2の作業用であまりネタがバレたくないということもあり、特定人物に常に固定番号を割り振るのは...という思いがあります。 にさんがくろさま、「単純にソート後に連番を比較し、差>5」というのは、連番を比較というのはどういうことなのかもう少しお聞きしてもよろしいでしょうか。連番=通番と理解しておりますが、例えば、 5 7 25 10 と通番が並んだ場合、どのように引き算をして差の5を見るのでしょうか(5番と10番が特定人物です)。この状態では同じグループに属することになります。ご教示願えますか。 |
[194840] Re[4]: 同じグループに含めないようにするための考え方- ■記事引用/メール受信=OFF■ □投稿者/ コロン -(2022/04/23(09:50)) □U R L/ 移動中ですので、携帯から簡潔に失礼致します。 行番号の取得ですね。思いつきました、 後ほどためしてみます。 |
[194842] Re[5]: 同じグループに含めないようにするための考え方- ■記事引用/メール受信=OFF■ □投稿者/ にさんがくろ -(2022/04/23(16:33)) □U R L/ まず、初めの回答に誤りがありました。 真ならやり直す は誤り、 真でなければやり直す です。 そして、「連番」とは振られた乱数のことです。 乱数は1から順に振られますよね。 目的の人物(通番5と通番10)に振られた連番が5以上離れていればそのままOKですね。 どうせ乱数を振っているわけだから結果は何回やり直しても問題なしということです。 あっという間に終わるので、差が5以上になるまでやり直せ、ということです。 例に出したのは、もうわかると思いますが、 差が1でも、5と6の場合は別グループになるが、 ということです。 |
[194843] Re[6]: 同じグループに含めないようにするための考え方- ■ / 記事引用/メール受信=OFF■ □投稿者/ コロン -(2022/04/23(19:38)) □U R L/ にさんがくろさま 補足、ありがとうございました。 Findで検索して、Rowで行番号を取得し、絶対値処理をして、うまく行きました。 実際は差が1でも別グループに属することもあるのですが、おっしゃるように、差が5よりおおきいという処理をするのに時間がかかるわけではありませんので、>5で処理しました。 おせわになりました。 |
[194844] Re[7]: 同じグループに含めないようにするための考え方- ■記事引用/メール受信=OFF■ □投稿者/ にさんがくろ -(2022/04/24(07:10)) □U R L/ >Findで検索して、Rowで行番号を取得し、絶対値処理をして、うまく行きました。 これを読んで、何をしたのかが分からず、 もう一度私の回答を読み返したところ、 全く申し訳なかったのですが、 もう1点誤りが在りましたね。 ソート後に差を比較 と在りましたが、 ソート後ではなく、乱数付与後 の誤りです。 ということで、解決してしまった後で申し訳ありませんが、 以下の流れで簡単かと。 @30件の頭から乱数を振る。 Aそして、通番5と10の乱数を比較する。 B差=>5なら@に戻る。(乱数付与をやり直す) C頭から5件ずつ並べてゆく。 これだけの筈ですが。 申し訳ありませんでした。 |
[194845] Re[8]: 同じグループに含めないようにするための考え方- ■記事引用/メール受信=OFF■ □投稿者/ にさんがくろ -(2022/04/24(20:15)) □U R L/ 細かく読まずに、 簡単などと言ってしまった手前、 本当に簡単なのか、やってみました。 これで横からの口出しは終了にします。 お邪魔しました。 Option Explicit Sub sample2() Dim n As Long Dim m As Long Dim p As Long Dim dbl As Long Dim yamada05 As Long Dim yamada10 As Long Sheets("sheet2").Select retry1: Range("C2:C31").ClearContents For n = 1 To 30 retry2: Randomize m = Int(30 * Rnd + 1) dbl = Application.Count(Application.Match(m, Range("C2:C31"), 0)) If dbl > 0 Then GoTo retry2 Else Range("C" & n + 1).Value = m End If Next yamada05 = Range("C" & Application.Match("yamada05", Range("B2:B31"), 0) + 1) yamada10 = Range("C" & Application.Match("yamada10", Range("B2:B31"), 0) + 1) If Abs(yamada05 - yamada10) <= 5 Then GoTo retry1 Range("A2:C31").Sort Key1:=Range("C2"), Order1:=xlAscending Sheets("sheet1").Select p = 1 For n = 1 To 6 For m = 1 To 5 Cells(m + 1, n).Value = Worksheets("sheet2").Cells(p + 1, 2).Value p = p + 1 Next Next MsgBox "done" End Sub |
このトピックに書きこむ |
---|