戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
同じグループに含めないようにするための考え方

    [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
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G