- ベストアンサー
エクセルでのオートシェイプについての質問です。
エクセルでのオートシェイプについての質問です。 エクセルのシートの一定の決まったセルに数字を打ち込むとそれに連動してオートシェイプの矢印の長さを変更できるようにしたいのですが、わかる方いますでしょうか? 例えばB1に「1.0」、B2に「1.5」、B3に「2.0」を入力した場合、連動してc1,c2,c3にある矢印の長さが変わるものです。 VBAを理解したいのですが、できれば、コピー貼付けできるコードを教えていただきたいのです。
- みんなの回答 (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
その他の回答 (2)
- watabe007
- ベストアンサー率62% (476/760)
>B1のセルが=A1*30という形ではうまくいきません。 計算式で値が変わってもChangeイベントが動きません。 A1セルでChangeイベントが動くようにすれば良いでしょう
補足
確かにおっしゃる通りです。 数字をペーストで貼りつけるだけでも、Changeイベントは動かないみたいです。 ただ、A1セルは、=D1/E1なのです。こういう場合、どこを変えればよろしいでしょうか。
- watabe007
- ベストアンサー率62% (476/760)
シートモジュールに 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
補足
素早い回答で、感謝します。ただ、B1のセルが=A1*30という形ではうまくいきません。 B1のセルが計算式では、不可能なのでしょうか。
お礼
感謝いたします。助かりました。