| 
    
     |  | 下記プログラムで、1列目に行を挿入した場合に問題なく線を引くためには、どこを変更したらいいでしょうか? ------------------------------------------------------------------
 ------------------------------------------------------------------
 
 このようなシートで、B列に入れた数だけ、C列以降に線を引きます。
 A    B   C     D     E     F    G    H     I
 1  開始日 日数 5月1日 5月2日 5月3日 5月4日 5月5日 5月6日 5月7日
 2  5月1日  2  -------------
 3  5月3日  4             ----------------------------
 4  5月7日  1                                   ------
 5  5月2日  5        ------------------------------------
 6  5月4日  3                   ---------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim i As Integer, j As Long, futosa As Variant, LastCol As Integer, k As Integer
 Dim s As Shape, wLeft, wTop, wRight, wBottom
 Dim shapeLeft, shapeTop, shapeRight, shapeBottom
 Dim iroNO As String, iro As Variant
 On Error GoTo trap
 i = Target.Value
 j = Target.Row
 If Target.Column <> 2 Or j = 1 Or i <= 0 Or i > 31 Then
 Exit Sub
 End If
 With Application
 Do
 futosa = .InputBox("太さを指定してください?", "整数入力", 5, Type:=1)
 If VarType(futosa) = vbBoolean Then
 .EnableEvents = False
 .Undo
 .EnableEvents = True
 Exit Sub
 End If
 If futosa > 0 Then
 If futosa <= Target.Height Then
 Exit Do
 Else
 MsgBox "セルの縦幅よりも太いです。もう少し細い線を指定してください"
 End If
 End If
 Loop
 iroNO = " 8)黒 9)白 10)赤 11)黄緑" & vbCrLf & "12)青 13)黄 14)ピンク 15)水色"
 Do
 iro = .InputBox("線の色は、何番にしますか?" & vbCrLf & iroNO, "線の色指定", 8, Type:=1)
 If VarType(iro) = vbBoolean Then
 .EnableEvents = False
 .Undo
 .EnableEvents = True
 Exit Sub
 End If
 Select Case iro
 Case 8 To 15
 Exit Do
 End Select
 Loop
 End With
 With Rows(j)
 wTop = .Top
 wLeft = .Left
 wBottom = .Top + .Height
 wRight = .Left + .Width
 End With
 For Each s In ActiveSheet.Shapes
 shapeTop = s.Top
 shapeLeft = s.Left
 shapeBottom = s.Top + s.Height
 shapeRight = s.Left + s.Width
 If wTop <= shapeTop And wLeft <= shapeLeft And _
 wBottom >= shapeBottom And wRight >= shapeRight Then
 s.Delete
 End If
 Next
 LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
 For k = 3 To LastCol
 If Target.Offset(0, -1).Value = Cells(1, k) Then
 With ActiveSheet.Shapes.AddLine(Cells(j, k).Left, Target.Top + Target.Height / 2, _
 Cells(j, k + i).Left, Target.Top + Target.Height / 2).Line
 .Weight = futosa
 .ForeColor.SchemeColor = iro
 End With
 Exit For
 End If
 Next
 Target.Select
 trap:
 End Sub
 
 |  |