• ベストアンサー

ExcelVBA オートシェイプについて

セルの選択した場所のとなりにオートシェイプを移動させるマクロを組みたいと思っています 見かけがまったく同じシートが4枚あり、そのシート全てに同じマクロを指定したいのですが、オートシェイプの名前の指定の仕方が分からなく困っています SelectionChangeイベントでオートシェイプ移動のマクロを動かしているので、同じ名前のボタンならよいのですが・・・ なにかよい方法はないでしょうか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

シートをコピーしたもので無いと、その後抹消や追加をしない前提で無いと、オートシェイプの名は変わる可能性があります。INDEXで指定しても抹消や追加をしないようにしないと、変わる可能性があります。 それを避けるために、人間が指定することを考えるとしても、セルの選択とオートシェイプの選択を関連付けるのが難しいのでは無いでしょうか。 私は過去の回答で、セルのTOPに1つのOVALのTOPを一致して配置し、同行内であれば、セルのChangeなどで隣セルのLEFTと同行に配置したOVALのLEFTを一致させる移動をする回答をしたことがあります。 Selection/ValuともChaneイベントは扱いにくいし、むつかしい。

jobvba
質問者

お礼

回答ありがとうございます! やっぱり難しいですね。なんとかやってみます

その他の回答 (2)

回答No.3

> 同じ名前の付け方が分かりません オートシェイプを選択した状態で、名前ボックス(シート左上のほうに図形名が表示されている)内を クリックして、直接書き込みます。 前回のモジュールは、各シートのオートシェイプごとにここで QQQ という同じ名前をつけたという 前提です。

jobvba
質問者

お礼

できました!ありがとうございました!

回答No.2

> セルの選択した場所のとなりにオートシェイプを移動させる シートごとに、移動させるオートシェイプを選択し名前ボックスで同じ名前をつけられたら いかがでしょうか。 各シートのオートシェイプの名前を QQQ とした場合、ThisWorkbook モジュールに、 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)  Dim T, L  T = Target.Offset(0, 1).Top  L = Target.Offset(0, 1).Left  ActiveSheet.Shapes("QQQ").Top = T  ActiveSheet.Shapes("QQQ").Left = L End Sub 解釈を誤っていたら、ごめんなさい。

jobvba
質問者

補足

回答ありがとうございます! しかし・・・同じ名前の付け方が分かりません! 同じ名前のオートシェイプをマクロでも指定しなくてはならないので、どうにかできないでしょうか?

関連するQ&A