アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2016を使っております。
フォームコントロールのボタンを挿入し、そのボタンをクリックすると、そのボタンのあるセルに特定の値が入るコードの作成は可能ですか?

現在、例えばA5セルに値を入れたいときは、A5セルにボタンを配置し、以下のようなコードをボタンに登録しているのですが、行や列のずれがあるとマクロが意図したとおりに動かなくなってしまいます。

Sub button()
Range("A5").Value = "1"
End Sub

A 回答 (3件)

ボタンの位置とセルの位置とは関連付けられていません。

ボタンを置いた位置の下に、たまたまそのセルがあるってだけです。だからボタンの位置を変えても、ボタンの動作としては何も変わりません。

ボタンの下にあるセルアドレスを検出して動くようにするには、自分でそうしたマクロを書く必要があります。以下でその実例が示されてるんで見てください。

https://www.google.co.jp/amp/blog.systemjp.net/e …
    • good
    • 0
この回答へのお礼

ありがとうございます。
しかし、私には理解できませんでした。

お礼日時:2018/07/23 15:35

>A5セルにボタンを配置し、


>そのボタンのあるセルに特定の値が入るコード

'//悪い見本
Sub ボタン1_Click()
Dim btn1 As Shape
Dim loc1 As Range, loc2 As Range
Dim rw As Long
Dim cl As Long
With Application
Set btn1 = ActiveSheet.Shapes(.Caller)
End With
Set loc1 = btn1.TopLeftCell '左上隅
Set loc2 = btn1.BottomRightCell '右下隅
'中点を探す 
rw = loc1.Row + (loc2.Row - loc1.Row) / 2 '四捨五入されている
cl = loc1.Column + (loc2.Column - loc1.Column) / 2 '〃
'ボタンの下に値が入る
Cells(rw, cl).Value = 1
End Sub

こういうことはできるけれども、

>行や列のずれがあるとマクロが意図したとおりに動かなくなってしまいます。
人為的にボタンを置いた場合は、ズレは免れません。
そういう場合は、最初からマクロで位置決めをして上げるというのが、通例です。
そうすると絶対にズレはなくなります。

しかし、今回、お話のままのマクロの実行では、ふつうのサイズのボタン(セルより大きいか、セルと同等のサイズ)なら、下に入ってしまいますから、ボタンを動かさなくては値の変化は見れません。

どこかで話そのものが抜けている部分があるのではないでしょうか。
    • good
    • 1
この回答へのお礼

ありがとうございます。
書いていただいたコードでうまく動いたようなんですが、どこかに問題があるのでしょうか。
行の挿入・削除があっても、ボタンを配置したセルに値が入りました。

なお、ボタンがセルに入るように、セルを大きくしてあります。

お礼日時:2018/07/23 15:37

ためしていただいて、ありがとうございました。


>書いていただいたコードでうまく動いたようなんですが、どこかに問題があるのでしょうか。
値を下に入れると思ったからです。

>ボタンがセルに入るように、セルを大きくしてあります。
それなら大丈夫だと思います。

もし、何かが欠けているというるな、ボタンを右クリックして、コントロールの書式設定の「配置」の
 セルに合わせていどうするがサイズ変更はしない

に、●をして置けばよいのかなって思っています。(もちろん、任意の範囲です)

マクロ的には、

Sub ctnContolChg()
Dim btn As Variant
For Each btn In ActiveSheet.Buttons
  btn.Placement = xlMove
Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
マクロまであるのですね。

お礼日時:2018/07/26 17:38

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