• ベストアンサー

セル色を5秒間隔で変える

マクロ作成でセルに色を3色順次に変わるようにしたいのですが、 セル色の変更時間が早く、最後の色のみの表示になります。 コマンドボタンをクリックすると、アクティブセル(B3からF3)までのセル色が黄色・薄青・赤に5秒間隔で変色し、その後、下のセルに移動します。 再度、コマンドボタンをクリックすると、先ほどの上のセルの色が消え、アクティブセルに黄色・薄青・赤に5秒間隔で変更するVBAをお教えください。マクロで作成したVBを表示しておきます。 {timer}を使用するみたいですが、理解出来ませんので、宜しくお願いします。 罫線も引いてあります。 ActiveCell.Range("A1:E1").Select With Selection.Interior Timer = 4 .ColorIndex = 35 .Pattern = xlSolid End With Selection.Interior.ColorIndex = xlNone With Selection.Interior .ColorIndex = 7 .Pattern = xlSolid End With Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideVertical).LineStyle = xlNone ActiveCell.Offset(1, 0).Range("A1:E1").Select End Sub

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

こんなのエクセルVBAの使い方(エクセルの使い方)としては懲りすぎだ。エクセルの操作や設定では出来ないことでしょう。そこまで高度に、珍奇にやりたいなら、本来は自分で勉強して、他人の回答に頼らず、やべき範囲の課題と思う。 ーー 質問の意味が1部良くわからない。例えばB-Fの5列を問題にしていてなぜ3色とか。勝手に当方で解釈した下記やってみた。 そういうことから質問者のニーズと外れている恐れもある。 参考になるところがあれば使って。自分の浅才のため、PUBLIC変数を使うところなど気に食わないが。 (1)Sheet1に(Formを介さず)コマンドボタン(コントロールツールボックスの方)を1つ貼り付ける。 (2)コマンドボタンのクリックイベントに下記を貼り付ける。 時刻の制御用。 Private Sub CommandButton1_Click() t = 0 r = ActiveCell.Row Range(Cells(r - 1, "B"), Cells(r - 1, "F")).Interior.ColorIndex = xlNone 指定時刻 = Now() For i = 1 To 5 指定時刻 = 指定時刻 + TimeValue("0時00分05秒") '5秒後 待ち時間 = TimeValue("0時00分05秒") Application.OnTime TimeValue(指定時刻), "test01", TimeValue(待ち時間) Next i End Sub ーー 標準モジュールに (3)パブリック変数 Public t Public r (4)実行モジュールに 定時に実行する処理内容。 Sub test01() Dim c(10) '5色のColorIndexの設定 c(1) = 3: c(2) = 12: c(3) = 5: c(4) = 9: c(5) = 6 t = t + 1 Cells(r, t + 1).Interior.ColorIndex = c(t) End Sub ーーーー 操作と結果の説明(質問もこのように書くべきではとおもう) B5をクリック コマンドボタンをクリック 5秒後にB5が赤、5秒後にC5オウド、5秒後に青・・とF5まで色が付く(C5を色をつけたときB5は色を消すのか質問で良くわからなかったので消してない) B6をクリック コマンドボタンをクリック B5:F5の色を消す B6から、上記B6の場合と同じことを繰り返す。 ーー クリックの5秒後から色付けが始まるが良くないかな。 改良は出来るでしょう。

gorugo48
質問者

お礼

質問の方法をこれから考えます。 いろいろな方法があるものですね。 参考になりました。 有り難うございます。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

>シート側の色変更用の変数を準備します 以降のコードは Sheet1など 色変更をしたいシートモジュールに記述してください

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

No2、onlyromです。 間違いがありです。(^^;;; NO2の回答で 選択範囲は、1行(B2~F2とか)か、又は、1列(E1~E5とか)を想定してある と書きましたが、 正しくは、 同じ行の範囲(B2~F2とか、E5~J5とか)のみ想定してあり 同じ列の範囲(E1~E5とか、B3~B9とか)は想定していません。 ということです。 同じ列の範囲(E1~E5とか、B3~B9とか)も想定するとコードが数行増えることになります。 所望ならアップします。 以上。  

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

>アクティブセル(B3からF3)までのセル色が黄色・薄青・赤に5秒間隔で変色し この意味がよく理解できません。 アクティブセルというのは、ひとつのセルのことです。  たぶん、こういうことでしょうね? ある範囲、例えば、B3:F3 を選択した後、 コマンドボタンをクリックすると 選択範囲(B3~F3)のセルを順番に5秒間隔で塗りつぶしていく 再度、ボタンをクリックしたら、 前回塗りつぶしたセルは色なしにし、次の行を同じく塗りつぶしていく これだけであれば、Waitメソッドが分かり易いかもしれません。 「コントロールツールボックス」の中のコマンドボタンをシートに配置 '--------------------------------------------------- Private Sub CommandButton1_Click()  Dim Rng As Range  Dim N As Integer  Dim myColor  myColor = Array(3, 6, 8)  '●色番号  If Selection.Cells(1).Row > 1 Then    Selection.Offset(-1).Interior.ColorIndex = xlNone  End If  For Each Rng In Selection.Cells    Rng.Interior.ColorIndex = myColor(N)    Application.Wait Now + TimeValue("0:00:05")    N = N + 1    If N > 2 Then N = 0  Next Rng  Selection.Offset(1).Select End Sub '-------------------------------------------- セル範囲を選択した後、ボタンをクリックして実行すること 選択範囲は、1行(B2~F2とか)か、又は、1列(E1~E5とか)を想定してある 色は、「赤、青、水色」にしてある 以上。  

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ExcelVBAの場合 Timerオブジェクトは無いので Applicationクラスの OnTimeメソッドを使います 標準モジュールを追加して タイマーで起動されるプロシージャを定義します Public Sub myChange()   '実際に背景色を変更するシートのプロシージャを呼ぶ   Sheet1.ColorChange() End Sub シート側の色変更用の変数を準備します Dim bFlag as Boolean Dim cl as integer DIm myDt as Date シート側に実際に実行するプロシージャを定義します Public Sub ColorChange()   ' 塗りつぶしの設定のみしています   ' セルの選択範囲もActiveCellのみです   ' 適宜修正してください   ActiveCell.Interior.ColorINdex = cl   if bFlag then     myDt = Now + Timevalue("0:0:5")   end if   Select Case cl   case 3     cl = 35   case 35     cl = 7   case 7     cl = 0   case else     ActiveCell.Offset(1,0).Select     myDt = Now   End Select   if bFlag then     Application.OnTime myDt, "myChange"   End if End Sub コマンドボタンのClickイベントに Private Sub CommandButton1_Click()   If bFlag = False Then     cl = 3     bFlag = True     Application.OnTime Now, "myChange"   Else     bFlag = False     Application.OnTime myDt, "myChange", , False End If End Sub とします コマンドボタンをクリックすると色変更が始まります もう一度クリックすると停止します

gorugo48
質問者

補足

redfox63様。 早速のご教授有り難うございます。 VBAが不慣れの為、再度質問指して頂きます。 すべて同じ標準モジュールにコピー指して頂きました。 「コマンドボタンのClickイベン」とありますが、同じ標準モジュールでよろしいのでしょうか。記入方法をお願いします。 Public Sub myChange()   '実際に背景色を変更するシートのプロシージャを呼ぶ   Sheet1.ColorChange()ここの位置が反転します。()も必要でしょうか。 End Sub 操作しますと コマンドボタンで下方向に移動はしますが、色がつきません。 何か間違っているのでしょうか。 宜しくお願いします。