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

タイトルのとおりです。
マクロを登録したボタンをセルのサイズに合わせて配置しました。
そのセルのアドレスを基準にしてオフセット(-1, -12)したセルに、別シートの複数セルをコピーして挿入したいと思い下記のコードを書いたのですが上手くいきません。

ボタンに登録するコード
--------------------------------------------------------------
Sub btnNo01_Click()

MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
Call button01

End Sub
--------------------------------------------------------------

呼び出したコード
--------------------------------------------------------------
Sub button01()

Dim s1 As Worksheet, s2 As Worksheet 's1 が作業シート、s2がコピー元シート
Set s1 = ActiveWindow.SelectedSheets(1)
Set s2 = Sheets("コピー元シート")

s2.Range("頁追加用!A2:T29").Copy
s1.Offset(-1, -12).Select
Selection.Insert shift:=xlDown

End Sub
--------------------------------------------------------------

ボタンの位置を拾わずに貼り付けセルを直接指定すれば動くのですが、ボタンをコピーしても
そのボタンの位置からオフセット参照できれば汎用性に富むと思いこの様なコードを書きました。

添削の程よろしくお願い致します。

質問者からの補足コメント

  • 失礼しました。
    s2はどちらも"コピー元シート"で統一します。
    分かりやすくしようとしてむしろ混乱を招いてしまいました。

    × s2.Range("頁追加用!A2:T29").Copy
    ○ s2.Range("コピー元シート!A2:T29").Copy

      補足日時:2019/03/07 17:40

A 回答 (2件)

No1です



>セルの絶対参照の値が表示されているので
>位置自体は拾っているとは思うのですが
拾っていても、そのまま捨ててしまえば何もしないのと同じことです。

>そこからオフセットした場所に~~手段が分からず
その取得したセルを基準にすれば良いだけでは?
少なくとも
 Worksheet.Offset(~~
はないでしょう。
    • good
    • 0

こんにちは



ご提示のコードだけでは意図を測りかねますが、ご質問文と照らしてみると…

>s2.Range("頁追加用!A2:T29").Copy
アドレスでシートを含めて指定していますが、s2のシートとは異なっているように見えます。
作者はどちらのシートを指示したいつもりなのでしょうか?
(VBAの場合、アドレスにシート名を入れるような用法はあまり行わないと思います)

>s1.Offset(-1, -12).Select
変数s1はワークシートなので、Offsetメソッドは存在しないはず。
基準としたいセル位置(=Rangeオブジェクト)からのオフセットを示したいのではないでしょうか?
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

シートの指定はコードをコピペした際、少しでも第三者に分かりやすいようにと修正していたのですが
修正漏れでかえって分かり辛くなってしまいました。
ご指摘ありがとうございました。

基準としたいセルはボタンを配置したセルです。
メッセージボックスにはそのセルの絶対参照の値が表示されているので
位置自体は拾っているとは思うのですが、そこからオフセットした場所に
コピーしたセルを挿入する手段が分からず困っております…

お礼日時:2019/03/07 17:46

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