- ベストアンサー
セル色を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
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんなのエクセル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秒後から色付けが始まるが良くないかな。 改良は出来るでしょう。
その他の回答 (4)
- redfox63
- ベストアンサー率71% (1325/1856)
>シート側の色変更用の変数を準備します 以降のコードは Sheet1など 色変更をしたいシートモジュールに記述してください
- onlyrom
- ベストアンサー率59% (228/384)
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)
>アクティブセル(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)
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 とします コマンドボタンをクリックすると色変更が始まります もう一度クリックすると停止します
補足
redfox63様。 早速のご教授有り難うございます。 VBAが不慣れの為、再度質問指して頂きます。 すべて同じ標準モジュールにコピー指して頂きました。 「コマンドボタンのClickイベン」とありますが、同じ標準モジュールでよろしいのでしょうか。記入方法をお願いします。 Public Sub myChange() '実際に背景色を変更するシートのプロシージャを呼ぶ Sheet1.ColorChange()ここの位置が反転します。()も必要でしょうか。 End Sub 操作しますと コマンドボタンで下方向に移動はしますが、色がつきません。 何か間違っているのでしょうか。 宜しくお願いします。
お礼
質問の方法をこれから考えます。 いろいろな方法があるものですね。 参考になりました。 有り難うございます。