今、リンク先の通り、8箇所にオートシェイプ(直線)があります。左上から順に、
J25が空白ならばオートシェイプ(直線)を表示、空白でないならば非表示
J32が(以下同じ)
J40が(以下同じ)
J48が(以下同じ)
AB30が(以下同じ)
AB44が(以下同じ)
CA46が(以下同じ)
というようなことを実現したいです。
初心者質問で申し訳ないことかぎりですが、お力いただければ幸いです。
どうぞよろしくお願い致します。
https://drive.google.com/drive/folders/0BzkvwuFCJtLEcU9VcXBBbzF4N3M?usp=sharing
ざっくりとですが、以下のような感じでしょうか。
J25が空白なら斜線を表示し、値が入っていたら斜線を非表示にするサンプルです。
Private Sub Worksheet_Change(ByVal Target As Range) If Range("J25").Value = "" Then ActiveSheet.Shapes.Range(Array("斜線1")).Line.Visible = msoTrue Else ActiveSheet.Shapes.Range(Array("斜線1")).Line.Visible = msoFalse End If End Sub
セル内容を変更する度にマクロ起動するのではマクロ起動方法にもよりますが、運用性が如何かと思いました。
VBAを標準モジュールに記述ではなくシートモジュールに記述することで、セル内容が変更されるとほぼ同時に斜線のオン/オフが出来るように考えてみました。
提示されたサンプルの場合なら、以下の二つのプロシジャをそのまままとめて、当該ワークシートのシートモジュールに転記すれば、そのまま動作すると思います。
Private Sub Worksheet_Change(ByVal Target As Range)
'対象セルが変更されたときに斜線のオン/オフを行う
If Target.Cells(1).Address = "$J$25" Then
Call myLineCtrl(Target, "斜線1")
ElseIf Target.Cells(1).Address = "$J$32" Then
Call myLineCtrl(Target, "斜線2")
ElseIf Target.Cells(1).Address = "$J$40" Then
Call myLineCtrl(Target, "斜線3")
ElseIf Target.Cells(1).Address = "$J$48" Then
Call myLineCtrl(Target, "斜線4")
ElseIf Target.Cells(1).Address = "$J$56" Then
Call myLineCtrl(Target, "直線コネクタ 4")
ElseIf Target.Cells(1).Address = "$AB$30" Then
Call myLineCtrl(Target, "斜線5")
ElseIf Target.Cells(1).Address = "$AB$44" Then
Call myLineCtrl(Target, "斜線6")
ElseIf Target.Cells(1).Address = "$CA$46" Then
Call myLineCtrl(Target, "斜線7")
'ElseIf Target.Cells(1).Address = "$??$??" Then
' Call myLineCtrl(Target, "斜線???")
'
'
'
End If
End Sub
Sub myLineCtrl(prmTarget As Range, prmShapeName)
'斜線の表示オン/オフを行うサブプロシジャ
If prmTarget.Cells(1).Value = "" Then
'当該セルが値が入っていないなら斜線を表示する
ActiveSheet.Shapes(prmShapeName).Visible = True
Else
'当該セルに値が入っていたら斜線を表示しない
ActiveSheet.Shapes(prmShapeName).Visible = False
End If
End Sub
明日試してみます。ありがとうございます!
完璧に解決できました。
2017/04/04 19:59:32感謝致します。