• 締切済み

エクセルマクロにて

エクセルマクロにて、ルーレットを作成しました。 Googleでエクセルマクロ ルーレットで検索して一番上に出てくるコードを参考にしました。 クリップアートを挿入すると、ルーレットの動作が著しく重くなってしまいましたが。マクロに影響ってあるんでしょうか? 重たくなると言う感覚的な表現で掴みにくいかとは思いますが、何故クリップアートを複数挿入すると、マクロに影響あるかご存知の方いらっしゃいますか?

みんなの回答

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

マクロの処理内容が不明ですが、・・・  ※繰り返し処理の中で、毎回、クリップアートの再表示を行っていませんか? 処理中の画面更新を off にしてみては? ※処理終了後、一回だけ、画面更新をする。

rockman_se
質問者

お礼

ありがとうございます。 自宅のPCにマクロが存在するので、帰宅次第、コードを載せます。画面更新の命令ってSCREENUPDATINGでしょうか?

rockman_se
質問者

補足

コードを載せます Declare Sub Sleep Lib "kernel32" _ (ByVal dwMilliseconds As Long) Sub ROULETTE_GAME4() 'ビジュアルルーレット Dim slpTime As Integer Dim myRandSpan As Integer Dim rt As Integer Dim i As Integer Dim bc As Integer Dim hc As Integer Dim myNum As Integer '抽選範囲 myRandSpan = 10 '円グラフ範囲再設定 Range("A:A").ClearContents For i = 1 To myRandSpan Cells(i, 1).Value = 1 Next i '回転数 rt = 4 '切替間隔増分 slpTime = 2 'myRandSpanが大きい場合は rt, slpTime は小さい '値にしてください 'ベースカラー bc = 2 'ハイライトカラー hc = 3 '抽選 Randomize myNum = Int(Rnd() * myRandSpan) With ActiveSheet.ChartObjects("グラフ 2").Chart .SetSourceData Source:=Sheets("Sheet1"). _ Range("A1:A" & myRandSpan), PlotBy:=xlColumns .SeriesCollection(1).Interior.ColorIndex = bc '開始位置までのハイライト移動 If myNum > 2 Then For i = 1 To myNum - 1 Sleep slpTime With .SeriesCollection(1) .Points(i + 1).Interior.ColorIndex = hc .Points(i).Interior.ColorIndex = bc End With DoEvents Next i End If 'メインルーレット For i = 1 To rt * myRandSpan + 1 Sleep i * slpTime With .SeriesCollection(1) .Points(myNum + 1).Interior.ColorIndex = hc If myNum = 0 Then .Points(myRandSpan).Interior.ColorIndex = bc Else .Points(myNum).Interior.ColorIndex = bc End If End With myNum = myNum + 1 myNum = myNum Mod myRandSpan DoEvents Next i End With End Sub