- ベストアンサー
Excel VBAでマクロの実行範囲を限定することはできますか?
選択したセルに塗りつぶしを設定するマクロを組んでボタンに登録していますが、塗りつぶし不可のセルを選択してボタンをクリックした場合は塗りつぶしのマクロが実行できないようにする、といったことはできますか? よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
以下は特定の範囲を除いてセルの背景色を塗るマクロです。予め塗りつぶしたくないセル範囲に「塗りつぶし不可」という名前を定義してから使用して下さい。 Sub Macro9() Dim iRng, tCell As Range If TypeName(Selection) = "Range" Then For Each tCell In Selection Set iRng = Application.Intersect(tCell, Range("塗りつぶし不可")) If iRng Is Nothing Then tCell.Interior.ColorIndex = 3 End If Next End If End Sub
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #3 のWendy02です。 今、たまたま読み直してみましてマクロを作ってみました。ただ、#3に書いたことを撤回するわけではありませんので、内容はまだ生きています。 試してみれば分かりますが、以下のようにすると、まるで、トランプの『神経衰弱』か、地雷を埋め込んだようです。 'シートモジュール '--------------------------------------------------- Private Sub CommandButton1_Click() '塗りつぶし不可ボタン (KeepOut) Dim strNameRange As String Dim dummy As Variant Dim buf As String On Error Resume Next dummy = Application.Names("KeepOut") On Error GoTo 0 If dummy = Empty Then Application.Names.Add "KeepOut", RefersTo:="=" & Selection.Address Else strNameRange = Application.Names("KeepOut").RefersTo If Intersect(Range(strNameRange), Selection) Is Nothing Then buf = Replace(Mid(strNameRange, 2), ActiveSheet.Name & "!", "") Application.Names("KeepOut").RefersTo = "=" & Selection.Address & "," & buf End If End If dummy = Empty End Sub '--------------------------------------------------- Private Sub CommandButton2_Click() '塗りつぶしマクロ Dim dummy As Variant On Error Resume Next dummy = Application.Names("KeepOut") On Error GoTo 0 If dummy = Empty Then Selection.Interior.ColorIndex = 34 '水色 ElseIf Intersect(Range("KeepOut"), Selection) Is Nothing Then Selection.Interior.ColorIndex = 34 Else MsgBox "塗りつぶし禁止区域を含んでいますので、取りやめです。", vbInformation End If dummy = Empty End Sub
お礼
2度のご回答ありがとうございました。 VBAのあまり知識がないので、もっと勉強してから、いただいたモジュールを試してみます。 本当にありがとうございました。
- NCU
- ベストアンサー率10% (32/318)
つーか塗りつぶし不可か、可か、どちらか一方(簡単な方)のセル範囲に名前を付けておけば十分でしょ。
お礼
ご回答ありがとうございました。もっと勉強して、みなさんにいただいたアドバイスを試してみます。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Yes/No だったら、Yes で、「出来ます」というだけです。 何をもって、「塗りつぶし不可」にするか、ではないでしょうか? 特定の列とか、行とか、セルを予め登録しておくのか、何かの文字が入っているのか、既に色がついているのか、その条件があると思います。それ以上は、今のところ、分かりません。
お礼
ご回答ありがとうございました。以下のお礼のとおり、あまりVBAの知識がありません。何を持って、というところは 例えばスケジュール表などを作成していて、その表内のセルしか塗りつぶしのボタン(マクロ)が使えないようにするという事です。ですので、「セルをあらかじめ登録しておく」ということになるのかもしれません。もっと勉強します。ありがとうございました。
- chibita_papa
- ベストアンサー率60% (127/209)
案1)セルを保護し保護されたれるセルは塗りつぶし不可 案2)先に白色で塗りつぶしをしておき白色で塗りつぶされたセルは塗りつぶし不可 と言うのはどうでしょうか。
お礼
ご回答ありがとうございました。VBAの知識もあまりなく、「塗りつぶし不可」という設定を具体的にどこで行うのかすら分かりませんでした。勉強して試してみます。ありがとうございました。
- NCU
- ベストアンサー率10% (32/318)
できますよ。 「塗りつぶし不可のセル」かどうかを判定できるように、「塗りつぶし不可」のフラグを決めてやればいいだけです。
お礼
ご回答ありがとうございました。VBAの知識があまりなく、「フラグを決めてやる」というところから分かりません。勉強して試してみます。ありがとうございました。
お礼
ご回答ありがとうございました。 うまくいきました! 本当にありがとうございました。