質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3312閲覧

貼り付けた複数のボタンに上から順番にマクロ登録

vitabrevisarsl1

総合スコア57

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/11/05 07:24

イメージ説明

別シートにある10行(▲ボタン2、▼ボタン3 含む)を貼り付け。ボタン名はボタン37とボタン38等に自動で割り振られるようです。
その後ボタンそれぞれ(ボタン37とボタン38、ボタン40とボタン41)に10行纏めて上方・下方へ移動するマクロを貼り付ける、という流れを考えました。


VBA

1 ActiveSheet.Shapes.Range(Array("Button 37")).Select 2 Selection.OnAction = "上に行移動" 3 ActiveSheet.Shapes.Range(Array("Button 38")).Select 4 Selection.OnAction = "下に行移動"

マクロの記録によると、ボタンへのマクロ登録は上記のようになります。
そこで質問ですが、例えばいま貼り付けされたばかりのボタン37とボタン38、あるいはボタン40とボタン41… を順番に選択するにはどのようにすればよいのでしょうか?
インデックスを取得しなければならないのか、または1番目2番目… という処理が可能なのか。。。

なにがしかご教授いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私の環境(Windows7/Office2010)でSheet1のセル範囲をCopy文でSheet2に複数回コピーした状態を確認しましたが、コピーしただけで各ボタンには既にコピー元と同じマクロが割り当てられていました。
今回のご質問は、このマクロを別のマクロに割り当てなおして使いたいということでしょうか。

ボタンの名前がすべて把握できるのであればボタン名で対象を指定していくことも可能ですが、今回はそうでもなさそうですね。

そこで、以下のような方法で対応されては如何でしょうか。
①対象シート内のすべてのオブジェクトを対象にループ処理を行う
②ループ内でオブジェクトを1つずつ取得し、それが▲ボタンか▼ボタンであればマクロ登録する
③すべてのオブジェクトをループし終えたら処理終了

Dim btn As Shape '①シート内のすべてのオブジェクト(シェイプ)をループ処理 For Each btn In ActiveSheet.Shapes '取得したオブジェクトを表示名で判別 Select Case btn.AlternativeText Case "▲" btn.OnAction = "上に行移動" Case "▼" btn.OnAction = "下に行移動" Case "Delete" 'TopLeftCellプロパティでボタン左上のセルを取得することもできます。このセルから行番号を取得すれば何セット目か判断することもできそうです。 MsgBox btn.TopLeftCell.Row End Select Next

添付いただいた画面では「▲」ボタン、「▼」ボタンに加えて「Delete」ボタンもコピーされているようでしたので一応、判別処理に含めておきました。

参考になれば幸いです。

投稿2017/11/06 02:11

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問