Excelマクロのオートシェイブコピーについて

このQ&Aのポイント
  • Excelマクロを使用して、列を自動的に表示したり非表示にしたりする方法について説明します。
  • オートシェイブXとオートシェイブYのコピーで異なる値が出る場合がある原因について教えてください。
  • Excelマクロを使用する際に、オートシェイブXおよびオートシェイブYのコピーの動作に違いが生じる場合があります。その違いについて詳細を教えてください。
回答を見る
  • ベストアンサー

Excel マクロ オートシェイブのコピーについて

列を自動的に表示したり、非表示にするマクロを組みました。 例えばA列にあるオートシェイブXを置いて、それに以下のマクロを登録します。 Sub 表示1() Dim col As Integer col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col + 1).Hidden = False End Sub 次に、B列に別のオートシェイブYを置いて以下のマクロを登録します。 Sub 非表示() Dim col As Integer col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col).Hidden = True End Sub これで、YをクリックするとB列が非表示になり、XをクリックするとB列を表示にすることができました。 ところが、このオートシェイブX、Yを別の列にコピーして使おうとすると、うまくいくときといかないときがあります。 例えば、オートシェイブXをG列にコピーしたとき、 ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column の値が、7になるときと、1のままのときがあります。 オートシェイブのコピーにおいて、そのままコピーされるとき(7になるとき)と、ちょうどショートカットのようなものになるとき(1になるとき)があるようです。 両者の違い(どのようなときに違いが出るのか)についてどなたか、お教えください。

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

  • ベストアンサー
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

図形(オートシェープ)のプロパティで 「位置関係」が ・一番下の「セルに合わせて移動やサイズ変更をしない」になっているためだと思います。 ・一番上のものだとどんな場合も同じになるはずです。

ryou4649
質問者

お礼

どうやら、コピーする前にマクロ登録をしたのがダメだったようです。 マクロ登録せずにコピーして、その後に一斉登録したらOKでした。

ryou4649
質問者

補足

図形(オートシェープ)のプロパティの「位置関係」は、 「セルに合わせて移動やサイズ変更をする」 になっています。

関連するQ&A

  • excel オートシェイブのコピーについて

    ワークシート内にオートシェイブを使って、マクロのボタンを作りました。 同じボタンを複数個使うのでコピーしてマクロ登録しようとしたところ、 1)同じオートシェーブNoになる場合(AutoShape1_Click) と 2)違うオートシェイブNoになる場合(AutoShape1_ClickとAutoShape2_Click) がありました。 登録したマクロが、オートシェイブオブジェクトの置かれているセル行を使用しているため col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 1)の場合は最初に置いたAutoShape1のセル行が返されてきます。 質問ですが、  イ) コピーをして、1)になる場合と、2)になる場合はどこが違うんでしょうか?  ロ) オートシェイブのプロパティを見る方法ってありますか?    コピーしたオートシェイブNoを確認したいのですが…

  • Excelで合成オートシェーブにマクロ登録でエラー

    excelで、非表示列を表示にするのに、ボタンで行えるようにしました。 オートシェーブ画像を合成した図形をセル内に置き、そのボタンを押すとその隣の列が表示になるというものです。 col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col + 1).Hidden = False これで、うまく動作していたのですが、突然動作しなくなってしまいました。 ボタンを押すと 「実行時エラー'-2147024809(80070057)' 指定した名前のアイテムが見つかりませんでした」 というエラーメッセーが出て、 col = ActiveSheet…の行で停止してしまいます。 原因と対策について教えていただけませんか? 思い当たることとしては、開発はExcel2003で行っているのですが、昨日Excel2007上で動作させました。(ちゃんと動きました。)その後、そのファイルをUSBメモリで持ち帰り、Excel2003で動かそうとしたら、上記の状態で動かなくなっていました。 それと、単独のオートシェーブにマクロを登録したときは、再度マクロ登録の画面に行くと マクロ名という覧に登録したマクロが表示されるのですが、 合成オートシェーブの場合、 「Group1295_Click」 と表示され、登録されているマクロ名が表示されないのですが、これは正常なのでしょうか?

  • excel マクロでデータ抽出したい

    excelの抽出をマクロ化しようと思っています。 キー記録で Sheets("data").Range("B11:O714").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("data").Range("G3:G5"), CopyToRange:=_ Range("B4:O615") , Unique:=False を得たので、これを元にして、条件範囲をオートシェイプのある列を条件にしようと思い、 col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column で、オートシェイプの列を取得し、 Sheets("data").Range("B11:O714").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("data").Range(Cells(3, col), Cells(5, col)),_ CopyToRange:=Range("B4:O615") , Unique:=False としたのですが、エラーになってしまいます。 colを使って条件範囲をするにはどうしたらいいのでしょうか? よろしくお願いします。

  • VBAでオートシェープのテキストを取得の際、ShapesとDrawingObjects?

    エクセル2003です。 オートシェープの基本図形の「額縁」に以下のマクロを登録しました。 マクロを呼び出したオートシェープに表示してあるテキストを取得しようとするものです。 Sub test() x = Application.Caller MsgBox ActiveSheet.Shapes(x).Characters.Text End Sub ところが実行時エラーとなってしまいます。 試行錯誤の結果、ShapesをDrawingObjectsに変えるとうまくいきます。 なぜでしょうか?

  • オートシェイブだけ削除したい場合、

    シートの上にオートシェイブとOLEオブジェクトの方のコマンドボタンがあり、 オートシェイブだけ削除したい場合、 どのようなvbaコードになるのでしょうか? Sub Sample() ActiveSheet.Shapes.Delete End Sub 上だと 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 になります。

  • excel オートシェープでマクロエラー

    どうにも不思議な現象が発生して困っています。 どなたか原因と解決方法を教えてください。 ワークシートに挿入した図形にマクロを登録し、選んだ図形によって処理を変えます。 登録したマクロに row = ActiveSheet.Shapes(Application.Caller).TopLeftCell.row を書いて、図形のある行を取得し、どの図形がクリックされたかを判断しています。 不思議なのはここからで、 【その1】  ずっと何年間も不具合無く動作していたのに急に「指定した名前のアイテムがみつかりませんでした。」というエラーが発生するようになりました。  しかも1回目に図形をクリックしたときは正常に動作するのに、続けて2回目をクリックするとこのエラーが出ます。 そして、デバッグでVB画面に移り、マクロを一度停止して再起動すると、また1回目は正常動作するのに2回目はエラーとなります。 【その2】 原因をさぐるためにrow = ActiveSheet.Shapes…の行の前にブレークポイントを設定してみたところ、ブレークポイントを置いて停止後に継続させると何回でも正常に動作します。 この現象自体が不明です。 どなたかよろしくお願いいたします。

  • オートシェイプの名前の取得

    エクセル2000を使用してます オートシェイプをクリックしたときはわかるのですが・・・ Sub オートシェイプ14_Click() Dim objShape As Shape Dim ShapeName As String Set objShape = ActiveSheet.Shapes(Application.Caller) ShapeName = objShape.Name End Sub 新規でオートシェイプ作成されたとき、その名前を取得するにはどうしたらいいのでしょう。 作成された順番にセルに表示したいのです

  • Excel スピンボタン 相対参照について

    スピンボタンの相対参照について調べていたところ、ちょうどやりたいことと類似した物ありましたので、実際にやってみたのですがうまくいきません。 sub macro1()  with activesheet.shapes(application.caller)   .topleftcell.offset(0, 1) = .oleformat.object.value  end with end sub 上記のようにソースが書かれていましたので入力しても.oleformatのところでエラーになってしまいます。 ご教授お願い致します。

  • オートシェイブをIncrementLeftプロパテ

    オートシェイブをIncrementLeftプロパティで今ある位置から指定したポイントだけ左にするのではなく、 一番左から指定したポイント分の位置を指定するプロパティを教えてください。 今は、 Sub test() ActiveSheet.Shapes.Range(Array("タイトル")).Select Selection.ShapeRange.IncrementLeft -10000 Selection.ShapeRange.IncrementLeft 40 End Sub にしてるのですが、2度手間なので、 -10000せずに、40と設定したら、 左から40の位置を指定できるプロパティを教えてください。

  • VBA オートシェイブや図を選択したいのですが

    VBAでシート上にある全てのオートシェイブや図を選択したいのですが どのようにすればいいでしょうか? 手作業でなら、CTRL+Gでオブジェクトを選択すればできますがVBAで行いたいです。 Sub test() Dim s As Shape For Each s In ActiveSheet.Shapes s.Select Next End Sub をしても、一つずつしか選択できません。 全てを選択状態にしたいです。

専門家に質問してみよう