とっておきの手土産を教えて

マクロ作成でセルに色を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

A 回答 (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秒後から色付けが始まるが良くないかな。
改良は出来るでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/01 22:58

>シート側の色変更用の変数を準備します


以降のコードは Sheet1など 色変更をしたいシートモジュールに記述してください
    • good
    • 1

No2、onlyromです。



間違いがありです。(^^;;;

NO2の回答で
選択範囲は、1行(B2~F2とか)か、又は、1列(E1~E5とか)を想定してある

と書きましたが、

正しくは、
同じ行の範囲(B2~F2とか、E5~J5とか)のみ想定してあり
同じ列の範囲(E1~E5とか、B3~B9とか)は想定していません。
ということです。

同じ列の範囲(E1~E5とか、B3~B9とか)も想定するとコードが数行増えることになります。
所望ならアップします。

以上。
 
    • good
    • 0

>アクティブセル(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とか)を想定してある

色は、「赤、青、水色」にしてある

以上。
 
    • good
    • 0

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

操作しますと
コマンドボタンで下方向に移動はしますが、色がつきません。
何か間違っているのでしょうか。
宜しくお願いします。

補足日時:2008/05/18 07:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報