- ベストアンサー
Excel2007でのVBAについて
- Excel2007のVBAについて質問があります。セルをランダム色で塗るコードを書いたのですが、実行すると必ず同じ色になってしまいます。何が問題でしょうか?
- Excel2007のVBAでセルをランダム色で塗るコードを書いていますが、実行すると毎回同じ色になってしまいます。原因と解決方法を教えてください。
- Excel2007のVBAでセルをランダム色で塗るコードを書いたのですが、実行すると必ず同じ色になってしまいます。どうすればランダムな色を塗ることができるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Rndにはどんな値が代入されていますか? Rndの値の発生メカニズムはどうなっていますか? よいのかも知れませんが RGB((255 * Rnd), (255 * Rnd), (255 * Rnd)) これだと3色共同じ値になります。 見た目変化に乏しくなると思います。 Dim c As Range Dim myNum(3) As Integer Dim i As Integer For Each c In Range("B2:B11") For i = 0 To 2 Randomize myNum(i) = Int(rnd() * 255) Next i With c.Interior .Color = RGB(myNum(0), myNum(1), myNum(2)) End With Next
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
それぞれのセル(の色)を問題にする。 RGBのそれぞれの色要素をランダムにする。 255以内の数を指定。 ー>RAND関数でも同じですが、Rnd掛ける(上限ー下限)+下限ー>(255-0)+0の計算を行う。 がポイントと思う。 ーーー 書式をクリアしておいて、範囲指定して実行 Sub test02() Dim cl As Range For Each cl In Selection Randomize With cl.Interior .Pattern = xlSolid r = Int(Rnd() * 255) MsgBox Int(Rnd() * 255) Randomize G = Int(Rnd() * 255) Randomize B = Int(Rnd() * 255) .Color = RGB(r, G, B) '.PatternTintAndShade = 0 End With Next End Sub
お礼
imogasiさま いつも素早く、そして的確なご回答に感服と驚愕いたしております。 ありがとうございました。助かりました。 先にご回答頂きましたxls88さまをベストアンサーに選ばせて頂きました。
補足
xls88さま imogasiさま 丁寧なご回答ありがとうございます! お二方のコードを実行してみましたが、大変申し訳ありません、 質問文に瑕疵がありました。 >「セルをランダム色で塗る」というコードを自分なりに考え、 という部分ですが、 「複数(あるいは一つ)のセルを選択し、その複数セルを同一のランダム色で塗る」と記述しなければなりませんでした。 例えば、B2からB11セルをポインタで選択しておいて、 VBAを実行すると、その10個のセルがすべてランダムに選ばれた同じ色に塗りつぶされ、 そしてまた再実行すると1,600万色の中からランダムに選択された異なった色に塗りつぶされる、 ということを教えていただきたかったのです。 不手際をお詫びいたします。再度ご教示いただければ、幸いに思います。 申し訳ありません。よろしお願い申し上げます。
お礼
xls88さま imogasiさま 補足の件ですが、「With Selection.Interior」 を用いて解決いたしました。 お騒がせいたしました。 ご丁寧に、ありがとうございました。ほんとうに助かりました。
補足
xls88さま imogasiさま 丁寧なご回答ありがとうございます! お二方のコードを実行してみましたが、大変申し訳ありません、 質問文に瑕疵がありました。 >「セルをランダム色で塗る」というコードを自分なりに考え、 という部分ですが、 「複数(あるいは一つ)のセルを選択し、その複数セルを同一のランダム色で塗る」と記述しなければなりませんでした。 例えば、B2からB11セルをポインタで選択しておいて、 VBAを実行すると、その10個のセルがすべてランダムに選ばれた同じ色に塗りつぶされ、 そしてまた再実行すると1,600万色の中からランダムに選択された異なった色に塗りつぶされる、 ということを教えていただきたかったのです。 不手際をお詫びいたします。再度ご教示いただければ、幸いに思います。 申し訳ありません。よろしお願い申し上げます。