• ベストアンサー

エクセルでのオートシェイプについての質問です。

エクセルでのオートシェイプについての質問です。 エクセルのシートの一定の決まったセルに数字を打ち込むとそれに連動してオートシェイプの矢印の長さを変更できるようにしたいのですが、わかる方いますでしょうか? 例えばB1に「1.0」、B2に「1.5」、B3に「2.0」を入力した場合、連動してc1,c2,c3にある矢印の長さが変わるものです。 VBAを理解したいのですが、できれば、コピー貼付けできるコードを教えていただきたいのです。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>>>例えばB1に「1.0」、B2に「1.5」、B3に「2.0」を入力した場合 >>B1のセルが=A1*30という形ではうまくいきません。 >ただ、A1セルは、=D1/E1なのです。 最後です。D1~E3何れかのセルに数値を入力されればB列の数値で長さが変化します。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim sha As Shape   With Target     If Intersect(.Cells, Range("D1:E3")) Is Nothing Then Exit Sub     If Not IsNumeric(.Value) Then Exit Sub     For Each sha In ActiveSheet.Shapes       If sha.TopLeftCell.Address = Cells(.Row, "C").Address Then         sha.Width = Cells(.Row, "B").Value       End If     Next   End With End Sub

ranaruheaven1
質問者

お礼

感謝いたします。助かりました。

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>B1のセルが=A1*30という形ではうまくいきません。 計算式で値が変わってもChangeイベントが動きません。 A1セルでChangeイベントが動くようにすれば良いでしょう

ranaruheaven1
質問者

補足

確かにおっしゃる通りです。 数字をペーストで貼りつけるだけでも、Changeイベントは動かないみたいです。 ただ、A1セルは、=D1/E1なのです。こういう場合、どこを変えればよろしいでしょうか。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

シートモジュールに Private Sub Worksheet_Change(ByVal Target As Range)   Dim sha As Shape   With Target     If Intersect(.Cells, Range("B1:B3")) Is Nothing Then Exit Sub     If Not IsNumeric(.Value) Then Exit Sub     For Each sha In ActiveSheet.Shapes     If sha.TopLeftCell.Address = .Offset(, 1).Address Then       sha.Width = .Value * 10       End If     Next   End With End Sub

ranaruheaven1
質問者

補足

素早い回答で、感謝します。ただ、B1のセルが=A1*30という形ではうまくいきません。 B1のセルが計算式では、不可能なのでしょうか。

関連するQ&A