- ベストアンサー
Excelシート上のボタンでセルの背景色を設定する
シート上のボタンを押したときにセルの値と背景色を設定したいのですが、エラーになります。 原因・解決策が分かる方お願いいたします。 Private Sub CommandButton1_Click() With Range("A1") .Value = "Yellow" .Interior.ColorIndex = 6 '実行時エラー1004:InteriorクラスのColorIndexプロパティを設定できません。 End With End Sub 環境 Excel97/Win98
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マクロの登録で作成されればいちばん簡単に解決すると思います。 一度お試し下さい。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#2に解答をいれた者です。一応判りました。 Private Sub CommandButton1_Click() ' Sheet1.CommandButton1.ForeColor = vbYellow ' MsgBox ActiveCell.Font.ColorIndex ' Sheet1.CommandButton1.ForeColor = RGB(1, 250, 250) ' Sheet1.CommandButton1.BackColor = ActiveCell.Font.Color '-----色 Sheet1.CommandButton1.BackColor = ActiveCell.Interior.Color 'Sheet1.CommandButton1.BackColor = RGB(1, 1, 255) 'Sheet1.CommandButton1.BackColor = vbYellow '------値 Sheet1.CommandButton1.Caption = ActiveCell.Value End Sub 「ActiveCell.Interior.Color」でRGB値に相当するものが採れるようです。「Color」プロパティを最近 使っていなくて忘れていました。(1)字の文字の色( Font.Color)に合わす場合(2)背景色(Interior.Color) に合わす場合とも上記のコメント記号(’)を適当に外してもらえば対処できると思います。 ボタン側は、文字がForeColorで、文字色がBackColor とややこしいです。よろしく。
お礼
ありがとうございます。 Colorプロパティは初めて知りました。 可読性でいえば、ColorIndexよりいいですね。 Private Sub CommandButton1_Click() ActiveCell.Select Range("A1").Interior.Color = vbYellow Range("A2").Interior.Color = vbBlue Range("A3").Interior.Color = vbGreen End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
中間報告みたいになりますが、済みません。 Private Sub CommandButton1_Click() ' Sheet1.CommandButton1.ForeColor = vbYellow ' MsgBox ActiveCell.Font.ColorIndex ' Sheet1.CommandButton1.ForeColor = RGB(1, 250, 250) Sheet1.CommandButton1.BackColor = RGB(1, 255, 255) Sheet1.CommandButton1.Caption = ActiveCell.Value End Sub 上記でボタンのCaptionにセルの値をセットするのは上手く行きます。 しかしCommandButton1のForecolorか、BackColorにColorIndex値をセット(=右辺)すると上手く行かない。vbYellowやRGB値をセットすれば上手く行く。 理由不明。ColorIndexからRBG値に変換する関数があれば、セルの色コードをRGB値で取ることができれば、凌げるのですが小生判らず。
お礼
すいません。 セルの背景色を設定したかったのです。 回答1のおかげで解決策は分かりました。(原因は不明ですが) >ColorIndexからRBG値に変換する関数があれば、 ブックのColorsプロパティです。 debug.print hex(activeworkbook.colors(6)), hex(vbyellow)
お礼
なるほど! Setlectすればうまく行きます。 Private Sub CommandButton1_Click() Range("A1").Select Selection.Interior.ColorIndex = 6 End Sub しかし、処理速度を上げるためSelectは使いたくないです。
補足
ありがとうございます イベント処理の先頭にActiveCell.Selectを入れる事により解決しました Private Sub CommandButton1_Click() ActiveCell.Select Range("A1").Interior.ColorIndex = 6 Range("A2").Interior.ColorIndex = 5 Range("A3").Interior.ColorIndex = 4 End Sub