Page 236 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼文字をランダムに並び替えるには? おんじい 02/10/20(日) 23:18 ┣Re:文字をランダムに並び替えるには? りん 02/10/21(月) 21:23 ┗Re:文字をランダムに並び替えるには? Ron 02/10/21(月) 22:53 ─────────────────────────────────────── ■題名 : 文字をランダムに並び替えるには? ■名前 : おんじい ■日付 : 02/10/20(日) 23:18 -------------------------------------------------------------------------
選択したセル内の文字をランダムに並び替えるマクロを組みたいんですが、 なかなか思うように組めませんでした。 例で挙げると A B C 1東京 札幌 福井 2大坂 三重 京都 3宮崎 大分 福岡 4新潟 佐渡 岩手 というファイル内の(A1)から(A4)までを選んで ランダムに入れ替え、さらに(B1)から(B4)までを選んで 同様にランダムに入れ替えていく という感じですが、 どなたか教えてください。よろしくお願いします。 |
おんじい さん、こんばんわ。 >選択したセル内の文字をランダムに並び替えるマクロを組みたいんですが、 作業用のシートに選択範囲を貼り付けて、ソートして戻す方法です。 Sub Test() Dim r1 As Range, ws As Worksheet, Rmax& If TypeName(Selection) <> "Range" Then MsgBox TypeName(Selection), vbCritical, "セル範囲を指定してから実行" Else Set r1 = Selection Rmax& = r1.Count 'セル個数 ' If Rmax& = 1 Then MsgBox "単一セル", vbInformation ElseIf r1.Columns.Count > 1 Then MsgBox "複数列", vbExclamation Else Application.ScreenUpdating = False '作業用ブック Set ws = Workbooks.Add.Worksheets(1) r1.Copy Destination:=ws.Cells(1, 1) With ws 'ランダムな値を与える With .Range(.Cells(1, 2), .Cells(Rmax&, 2)) .Formula = "=Rand()" 'ワークシート関数 .Value = .Value End With 'ソート .Range(.Cells(1, 1), .Cells(Rmax&, 2)).Sort _ Key1:=.Cells(1, 2), Order1:=xlAscending, Header:=xlNo '元の位置に戻す .Range(.Cells(1, 1), .Cells(Rmax&, 1)).Copy Destination:=r1 End With '作業ブック閉じる With ws.Parent .Saved = True .Close SaveChanges:=False End With '開放 Set r1 = Nothing: Set ws = Nothing Application.ScreenUpdating = True End If End If End Sub 件数が多くなるときは、配列を利用したほうが言いと思いますけどね。 |
こんばんは。 中途半端に配列を使ってみました。 複数列には対応してません。 Option Base 1 Sub 並び替え() Dim myAr As Variant Dim CNT As Long Dim i As Long With Selection If .Count = 1 Then Exit Sub If .Columns.Count > 1 Then Exit Sub myAr = .Value .Value = "" Randomize For CNT = 1 To .Count back: i = Int(Rnd * .Count + 1) If Not .Find(myAr(i, 1)) Is Nothing Then GoTo back Cells(CNT, 1).Value = myAr(i, 1) Next End With End Sub では。 |