Excel2007VBAで列ごとにランダム並べ替え

このQ&Aのポイント
  • Excel2007VBAを使用して、列ごとにデータをランダムに並べ替える方法について教えてください。
  • ランダムな並び替えができるExcel2007VBAのコードを探していますが見つかりません。どのように実現すれば良いでしょうか?
  • Excel2007VBAで特定の列のデータをランダムに並べ替える方法を教えてください。
回答を見る
  • ベストアンサー

Excel2007VBAで列ごとにランダム並べ替え

Excel(エクセル)2007VBAを使った、 コマンドボタンを押すたびに「ある一列のデータをランダムに並べ替える」VBAソースが知りたいです。 (Google検索をかなりしたのですが、この条件を満たすVBAソースが見つかりませんでした。) ----------------------------------- たとえば、 【A列】に A1:えんぴつ A2:消しゴム A3:定規 A4:コンパス A5:赤ペン A6:下敷き A7:ノート A8:クリアファイル A9:クリップ A10:色鉛筆 と入力したとします。 そして、コマンドボタンを一回押します。   ↓↓↓ 【A列】が A1:下敷き A2:ノート A3:クリップ A4:コンパス A5:定規 A6:色鉛筆 A7:えんぴつ A8:赤ペン A9:消しゴム A10:クリアファイル ↑のように、 【A列】にある「えんぴつ」「消しゴム」「定規」「コンパス」「赤ペン」「下敷き」「ノート」「クリアファイル」「クリップ」「色鉛筆」の文字が、【ランダムで並べ替え】されるようにしたいです。 【補足】 ※1回限定のランダム並べ替えではなく、コマンドボタンを押すたびに【何度でも】ランダム並べ替えできるようにしたいです(回数無制限のランダム並べ替えがしたいです)。 ※上記の【A列】に並べた文字はあくまで例です。実際は、【A列】に自由に文字を入力できる応用の利く仕様にしたいです(Excelの【A列】に、どんな言葉や数字を直接入力してもランダム並べ替えできる、という意味です)。 ※上記の【A列】が10行というのもあくまで例です。実際は、【A列】が何行にでも対応できる仕様にしたいです(具体的には【A列】が、時間がかかってでも5000行くらいまで対応できるのが理想です)。 実際はVBAを使わなくてもランダム並べ替えはできるのですが、その方法は効率が悪いと分かったので効率のため、コマンドボタンひと押しでランダムに並べ替えられる【VBAソース】が知りたいです。 上記の条件を満たすVBAソースがわかる方がいましたら、どうかご教授ください。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

> 実際はVBAを使わなくてもランダム並べ替えはできるのですが、 そうなのであれば、その一連の作業をすべて「マクロの記録」で記録し、それで記録されたマクロをコマンドボタンに登録すればいいだけですよ。

azazazaz1023
質問者

お礼

nattocurryさん ご回答いただきありがとうございます。 的確なアドバイスありがとうございます。 いろいろ検索しまして、今ようやく、「マクロの記録」とやらでバッチリランダム並べ替えできました。 こんな方法があること自体知らなかったです。 すごい便利ですね^^ すごい気付き、ありがとうございます。 すばらしいベストアンサーです。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

コマンドボタンには2種類ありますが,下記はActiveXコントロールを使用した場合の記載です。 private sub CommandButton1_Click()  dim r  r = cells(cells.rows.count, 1).end(xlup).row  application.screenupdating = false  range("A:A").insert  range("A1:A" & r).formula = "=RAND()"  range("A:B").sort key1:=range("A1"), header:=xlno  range("A:A").delete  application.screenupdating = true end sub

azazazaz1023
質問者

お礼

keithinさん ご回答ありがとうございます。 早速やってみました。 すごい!の一言。 私が求めていたもっとも理想的な動作をしてくれました。 本当に助かります。 keithinさんの回答もベストアンサーにしたかったです。

関連するQ&A

  • EXCEL2007で並べ替えができません

    OSはXPで、EXCEL2007を使用しています。 ランダムに入力した名簿(A列:連番、B列:地区・班番号、C列:氏名、D列:住所、E列:電話、F列誕生月、G列:備考、H列:会員番号)を氏名の昇順で並べ替えをしようとしてもできません。 ちなみにデータタブでカーソルをC列に置き、昇順ボタンを押しても、飯田が1番に来、新井が25番目に来てしまう始末です。 また、並べ替えボタンで、並べ替えウイザードの最優先されるキーに氏名を選択し、並べ替えキーを値、順序を昇順にしてOKボタンを押しても結果は同じでした。 解決方法をご教示ください。

  • 受験当日の持ち物チェック

    こんばんは、高校受験の親です。 HBの鉛筆を10本、鉛筆削り、消しゴム、分度器、三角定規、定規、コンパス、下敷き、腕時計。 受験票 こんなものでしょうか? あと何か必要なものがあれば教えてください。

  • Excel2002並べ替えについて

    いつもお世話になります。並べ替えでA列に数字がランダムに並んでいます。 A列を昇順で並べ替えようとすると「この操作には同じサイズの結合セルが必要です。」のメッセージが出ます。タイトル行がセルの結合がしてあるのがいけないのでしょうか。教えてください。よろしくお願いいたします。

  • 【Excel VBA】複数範囲の並べ替えは可能でしょうか?

    【Excel VBA】複数範囲の並べ替えは可能でしょうか? Excel2003を使用しています。 CSVデータを元に作成された下記のような表があります。 A列…日付、B列…受注番号、C列…摘要(会社名・品名等)、D列…金額となっています。 6行目以下に上記の内容でデータが入力されていますが、会社ごとのデータ内で日付順に並べ替えをしたいのですが、VBAで複数の範囲を選択して、それぞれの範囲内での並べ替えは可能でしょうか?     A     B     C    D 6             ○○会社 7   1/20   123   AAA   1,000 8   1/15   120   BBB   2,000 9 10              計     3,000 11 12            ××会社 13 計の1行上と下は空欄行で、以下、会社名の後にデータが続くというパターンの繰り返しで数十社分あります。 Excelのデータ⇒並べ替えでは複数選択した状態での並べ替えはできないので、VBAで可能であればと思い、質問させていただきました。 よろしくお願いします。

  • Excel2007VBAのランダム置換ソース

    Excel(エクセル)2007VBAを使って、 「複数ある、同一の置換したい文字・数」 を 「複数の文字・数」 でランダムに置換したいのですが、 VBAソースが分かりません。 たとえば、 【A列】に A1:私は(置換する所)と(置換する所)が得意です。 A2:彼は(置換する所)と(置換する所)と(置換する所)が特技です。 A3:彼女は(置換する所)と(置換する所)と(置換する所)と(置換する所)の選手です。 A4:彼らは(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)が好きです。 A5:あの人は(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)をしたことがありません。 と入力されている時に、 【B列】に B1:拳闘 B2:柔道 B3:野球 B4:籠球 B5:打球 B6:羽球 B7:剣道 B8:卓球 B9:水泳 B10:避球 と入力したとします。 そして、コマンドボタンを押すと 【A列】にあるすべての 「(置換する所)」 を、 【B列】にある「拳闘」「柔道」「野球」「籠球」「打球」「羽球」「剣道」「卓球」「水泳」「避球」のどれかで必ず置換されるようにします(【ランダムで置換】されるようにしたいです)。 ※置換の条件として、一つのセル内で同じ文字が重複しないようにしたいです。 (私は拳闘と拳闘が得意です。)     ↑   ↑ 同じ文字が2つ以上ある置換は失敗です。 --------------------------------- 置換の成功例 (重複なしの置換) ◆置換前の【A列】A5 あの人は(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)をしたことがありません。       ↓↓↓ ◆置換後の【A列】A5 あの人は打球と柔道と水泳と剣道と避球と拳闘をしたことがありません。 --------------------------------- これが未完成のVBAソースです。 ↓↓↓ Sub test_Click() For Each CellA In Range("A1:A5").Cells Rnd1 = Int(Rnd() * 10) + 1 Rnd2 = Int(Rnd() * 9) + 1 Rnd3 = Int(Rnd() * 8) + 1 Rnd4 = Int(Rnd() * 7) + 1 Rnd5 = Int(Rnd() * 6) + 1 Rnd6 = Int(Rnd() * 5) + 1 If Rnd2 = Rnd1 Then Rnd2 = Rnd2 + 1 If Rnd3 = Rnd2 Then Rnd3 = Rnd3 + 1 If Rnd4 = Rnd3 Then Rnd4 = Rnd4 + 1 If Rnd5 = Rnd4 Then Rnd5 = Rnd5 + 1 If Rnd6 = Rnd5 Then Rnd6 = Rnd6 + 1 CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd1, 2), , 1) CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd2, 2), , 1) CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd3, 2), , 1) CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd4, 2), , 1) CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd5, 2), , 1) CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd6, 2), , 1) Next End Sub 【補足】 ※コマンドボタンを押すとランダム置換される仕様です。 ※1回限定の置換ではなく、コマンドボタンを押すたびに(何度でも)ランダム置換できるようにしたいです。 ※上記の【A列】【B列】の文字はあくまで例です。実際は、【A列】【B列】ともに自由に文字を変更できる応用の利く仕様にしたいです(Excelの【A列】【B列】に、文字を直接入力して変更するという意味です)。 ※上記の【A列】が5行、【B列】が10行というのもあくまで例です。実際は、【A列】【B列】ともに何行にでも対応できる仕様にしたいです(具体的には【A列】【B列】ともに、10000行くらいまで対応できるのが理想です)。 長くなりましたが、ここまでの条件を満たすVBAソースが知りたいです。 どうかよろしくおねがいいたします。

  • Excel2010 VBA

    Excel2010でVBAのフォームを使って「コマンドボタン」をクリックしたときにフォーム入力した内容をデータ(リスト)に転記(反映)させたいのですが どのようにしたらいいでしょうか? コマンドボタンの作り方は分りましたがそのマクロを実行する内容(コード)の作り方がいまいちわかません ちなみにデータ(リスト)は上から順番に空白の列を埋められていけばいいです よろしくお願いします

  • 文字列を抽出して足し算するには?

    質問させていただきます。 下記のような表があったとします。   A        B      C      D 1 えんぴつ   100円    ノート   100円 2 消しゴム   200円    定規    200円 3 定規     150円    消しゴム  400円 4 ノート    300円    えんぴつ  150円 AとCには品名、BとDには値段が入力してあります。 そこで、別シートのセルに えんぴつ合計 250円 消しゴム合計 600円 定規合計   350円 ノート合計  400円 のようにそれぞれの品物の合計金額を出せませんでしょうか? *品名は同じでも値段が違います。 品名ごとに列を決めて入力すれば簡単なのでしょうが・・・ よろしくお願い致します。

  • エクセルのVBAでソートをしたい

    エクセルの A列に1,1,3,2,4・・・・・というデータがあって、 B列にB,A,C,D,E・・・・・というデータがった場合、 上から順番に1A,1B,2D,3C,4Eという順番に並べ替えしたいです。 エクセル単独でやる場合は、データの並べ替えでA列を第一優先、B列を第二優先で並べ替えをすればよいのですが、 VBAに埋め込んで、ボタンを押せば並べ替えできるようにできますでしょうか?

  • 文字列のランダム表示のVBA(エクセル)

    A1をダブルクリックすると、A1に7つの文字列がランダムに表示される。 追加条件として、先頭の文字は"a""c""f""h""k""9"に限定される。 2文字目から最後の文字までは、"0""1""2""5""6""7""8""x"に限定される。 例として、 f010156 a666082 k702x15 9xx7587 上記のVBAを教えていただきたいのですが。 よろしくお願いいたします。

  • エクセルの関数やマクロだけで、ランダムな並べ替えをするには?

    エクセルの機能である[データ]-[並べ替え]操作を使わずに、 ランダムなデータの並べ替えをするには、どうしたらいいでしょうか? 例: E列の乱数結果より、D列の内容をB列に並べ替え表示    A  B  C  D  E  F 1  順位 名称 C  場所 乱数   2   1       青森  5   3   2       埼玉  1   4   3       長野  3   5   4       福井  2   6   5       大分  4   7                   ↓    A  B  C  D  E  F 1  順位 名称 C  場所 乱数   2   1 埼玉    青森  5   3   2 福井    埼玉  1   4   3 長野    長野  3   5   4 大分    福井  2   6   5 青森    大分  4   7                   B列への関数入力または簡単なマクロを教えていただけると助かります。 よろしくお願いします。

専門家に質問してみよう