• ベストアンサー

エクセルのマクロ(VBA)について質問です。

お世話になります。 エクセルのマクロ(VBA)について質問があります。 下記、わかりにくいと存じますが、お力添え下さい。 ある表があります。 項目としてA列「名前」B列「連絡先」C列「順番」とんでE列に 「乱数」があります。 2行目にこれら項目名が並んでおり、3行目から34行目までは データ入力範囲になります(32名入力出来る。1行目は表のタイトルです) 入力したデータを順不同に並べたく、「順番」項目は乱数を用いた数字を入力させます。 ここから、マクロの登録をします。 ~↓登録中↓~ ・「乱数」項目の1番上(E3)から一番下(E34)までドラッグ  (範囲指定)し、右クリック→コピー ・「順番」項目の一番上(C3)で右クリック→”形式を選択して貼り付け” ”値”にチェックを付けて「OK」 ☆「順番」項目の一番上(C3)から「名前」項目の一番下(A34)まで ドラッグ(範囲指定)し、”昇順で並べ替え”ボタンを押す ~ここまで~ (乱数は、毎回変化してしまうのを防ぐ為、別項目から引っ張ってきて 値だけをコピーするようにしています) このようにマクロを登録しました。 しかし、毎回32名を入力するわけではなく、時には32名未満の入力をする場合があります。 別のセルF40に、COUNTA関数より取った「名前」項目に登録されている数を表示させているのですが、 ☆部分の処理にてこの数だけ範囲指定して並べ替えたいのです。 (セルC3から登録されている人数分だけ範囲指定したい、ということです。20名だけ登録されていれば、 セルC3からセルA22を範囲指定する。指定した部分だけを並べ替える) 32名未満の時、乱数に元づく順番で並べ替える際、データの入って いない行も順番に並んでしまうのですが、空白の行はそのままにし、 データの入っている行だけを上(セルA3)から詰めて並べたいのです。 VBAの編集で、COUNTA関数の結果の数字を変数に代入して使用したいのですが、 そのやり方がわかりません。 どなたかお知恵をくださいますよう、お願い致します。 (わかりにくい記述なので、必要に応じて補足させて頂きます。)

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

いろいろ方法は有りますが、一番修正が簡単そうな方法を。 E列の「乱数」にはおそらく =RAND() と、乱数を発生するセル式が入っている事と思います。 E3セルに =IF(A3="","",RAND()) と、入れて、下に(E34まで)コピーしてください。 これで、記録済みのマクロを動かして見てください。 名前が登録された行だけで並べ替えを行うはずです。

nakuyok
質問者

お礼

どうもありがとうございます。頂いた知恵を活用することが出来ました!何でもマクロを頼ろうとしてましたが、簡単なやり方を教えて頂きましてありがとうございました!

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 こういうことでしょうか? >別のセルF40に、COUNTA関数より取った「名前」項目に登録されている数を表示させているのですが、 VBAでは、不要のはずです。 '------------------------------------------- Sub TestMacro1() With ActiveSheet  With .Range("A2", .Cells(Rows.Count, 1).End(xlUp))    If .Rows.Count < 2 Then Exit Sub 'データがない場合は除外    .Resize(.Rows.Count - 1).Offset(1, 3).Formula = "=RAND()"    .Resize(, 4).Sort Key1:=Range("D1"), _             Order1:=xlAscending, _             Header:=xlYes  End With End With End Sub

nakuyok
質問者

お礼

回答下さり、ありがとうございました。1の方の回答が、かなり明確であった為、そちらを利用することにしました。 今回教えて頂いた方法は、一度確かめてみます。

関連するQ&A