dポイントプレゼントキャンペーン実施中!

【行いたいこと】
「相対参照」を維持しつつ、「手入力を追従する」ようにしたいです。

【現在の状況】
現在、excelで複数のセルに1つずつスピンボタンを設置し、
同じセル内に数字を入力しています。

例えば、A1のセルにスピンボタンを設置、そのボタンを押すとA1の数字が増減する。
同様にA2のセルにもスピンボタンを設置、そのボタンを押すとA2の数字が増減する。
・・・といった具合です。

コピペして複数のセルにスピンボタンを設置する必要性があるため、
数値が入力されるセルは「絶対参照」ではなく、マクロを使って
「相対参照」にしています。

以下、相対参照にしているコードです。
-----ここから-----
Sub macro1()
With ActiveSheet.Shapes(Application.Caller)
.TopLeftCell.Offset(0, 0) = .OLEFormat.Object.Value
End With
End Sub
-----ここまで-----

今現在、「相対参照」については、上記のコードでできていますが、
「手入力を追従する」の部分が全くできていません。

仮にセルに「25」と入力しても、スピンボタンを1回押すと
「1」と表示されてしまうため、25回スピンボタンを押している状態です。

スピンボタンを設置しているセルに任意の数字を入力し、
その後、スピンボタンを押すことで、その数字から1つずつ増やしたいのです。

例えば、「25」と手入力し、その後スピンボタンを押す毎に
26→27→28・・・と変化させたいのです。

「相対参照」を維持しつつ、「手入力を追従する」方法があれば教えてください。
よろしくお願いします。

A 回答 (1件)

シートモジュールに


Private Sub Worksheet_Change(ByVal Target As Range)
 Dim shp As Object
 For Each shp In ActiveSheet.Shapes
  If Target.Address = shp.TopLeftCell.Address Then
   shp.OLEFormat.Object.Value = Target.Value
  End If
 Next
End Sub

複数セルの変更には対応していません。
必要なら Target についてもループするように変更するだけです。

なお、先のマクロを走らせた場合にも、
変更のイベントが発生して、上記のコードが走ります。
結果に影響はありませんが。
気分が悪いようなら、次のようにすれば回避できます。

Sub macro1()
 With ActiveSheet.Shapes(Application.Caller)
  Application.EnableEvents = False
  .TopLeftCell.Offset(0, 0) = .OLEFormat.Object.Value
  Application.EnableEvents = True
 End With
End Sub
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます。
教えて頂いたコードを入力したところ、希望していたことが100%実現できました。

マクロ初心者で、まだまだわからないことだらけですが、
機会がございましたら、是非またアドバイスをよろしくお願いします。

お礼日時:2017/01/14 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています