• ベストアンサー

Excel VBAでマクロの実行範囲を限定することはできますか?

選択したセルに塗りつぶしを設定するマクロを組んでボタンに登録していますが、塗りつぶし不可のセルを選択してボタンをクリックした場合は塗りつぶしのマクロが実行できないようにする、といったことはできますか? よろしくお願いいたします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

以下は特定の範囲を除いてセルの背景色を塗るマクロです。予め塗りつぶしたくないセル範囲に「塗りつぶし不可」という名前を定義してから使用して下さい。 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

saya46419
質問者

お礼

ご回答ありがとうございました。 うまくいきました! 本当にありがとうございました。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 #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

saya46419
質問者

お礼

2度のご回答ありがとうございました。 VBAのあまり知識がないので、もっと勉強してから、いただいたモジュールを試してみます。 本当にありがとうございました。

  • NCU
  • ベストアンサー率10% (32/318)
回答No.4

つーか塗りつぶし不可か、可か、どちらか一方(簡単な方)のセル範囲に名前を付けておけば十分でしょ。

saya46419
質問者

お礼

ご回答ありがとうございました。もっと勉強して、みなさんにいただいたアドバイスを試してみます。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 Yes/No だったら、Yes で、「出来ます」というだけです。 何をもって、「塗りつぶし不可」にするか、ではないでしょうか? 特定の列とか、行とか、セルを予め登録しておくのか、何かの文字が入っているのか、既に色がついているのか、その条件があると思います。それ以上は、今のところ、分かりません。

saya46419
質問者

お礼

ご回答ありがとうございました。以下のお礼のとおり、あまりVBAの知識がありません。何を持って、というところは 例えばスケジュール表などを作成していて、その表内のセルしか塗りつぶしのボタン(マクロ)が使えないようにするという事です。ですので、「セルをあらかじめ登録しておく」ということになるのかもしれません。もっと勉強します。ありがとうございました。

回答No.2

案1)セルを保護し保護されたれるセルは塗りつぶし不可 案2)先に白色で塗りつぶしをしておき白色で塗りつぶされたセルは塗りつぶし不可 と言うのはどうでしょうか。

saya46419
質問者

お礼

ご回答ありがとうございました。VBAの知識もあまりなく、「塗りつぶし不可」という設定を具体的にどこで行うのかすら分かりませんでした。勉強して試してみます。ありがとうございました。

  • NCU
  • ベストアンサー率10% (32/318)
回答No.1

できますよ。 「塗りつぶし不可のセル」かどうかを判定できるように、「塗りつぶし不可」のフラグを決めてやればいいだけです。

saya46419
質問者

お礼

ご回答ありがとうございました。VBAの知識があまりなく、「フラグを決めてやる」というところから分かりません。勉強して試してみます。ありがとうございました。

関連するQ&A