質問: excelで行が挿入したときに、自動的に別シートにも挿入したい お世話になります。 例えばシート1の11行目に行が挿入された場合、 シート2の11行目にも自動的に行が追加されるような マクロを作りたいのですが、どうも検索で情報が 見つかりませんでした。 ご存知のかたがおられましたら、よろしく お願いいたします。
回答: こんにちは。 #5で書いたwendy02です。 あまりにも、#5の内容が手抜きで、みっともないような気がしたので、書き直して、classに取り付けました。ブックのコマンドボタンに取り付けたインスタンスですから、取り付けたブックにしか適用されません。 設定は、insertrow_for_classeventですから、thisworkbook のopenイベントや、sheet_activate イベントから、呼び出せばよいと思います。以下では、auto_openイベントを付けてあります。 '<標準モジュール> option explicit sub insertrow_for_classevent() 'クラスイベント設定用 static myclass1(0 to 2) as class1 dim myctrl as commandbarbutton dim cl as variant with application set myclass1(0) = new class1 set myclass1(0).btn = .commandbars("cell") _ .findcontrol(, 3181) set myclass1(1) = new class1 set myclass1(1).btn = .commandbars("row") _ .findcontrol(, 3183) set myclass1(2) = new class1 set myclass1(2).btn = .commandbars("worksheet menu bar") _ .controls("挿入(&i)").controls("行(&r)") end with end sub sub auto_open() call insertrow_for_classevent end sub ' private withevents mybtn as commandbarbutton public property set btn(byval mynewbtn as commandbarbutton) set mybtn = mynewbtn end property private sub mybtn_click(byval ctrl as office.commandbarbutton, canceldefault as boolean) dim myrng as range dim myrngadd as string 'シート1でない場合は、除外 if activesheet.name <> sheet1.name then exit sub set myrng = selection myrngadd = myrng.address(0, 0) '行挿入 if myrng.address(0, 0) = myrng.entirerow.address(0, 0) then '行全体 sheet2.range(myrngadd).entirerow.insert else 'セルの範囲 sheet2.range(myrngadd).insert end if end sub