[[20080702172530]] 『マクロボタンによる行の挿入』(pore) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『マクロボタンによる行の挿入』(pore)

 いつも変な質問で申し訳ありません。
 似たような質問&回答は検索でたくさん引っかかるのですが、
 応用できるものを見つける事ができませんでした。よろしければ教えてください。

           C         D       __E_____F_____G_____H_____I_____J_____K_____
 8                           

 9

 *

 16

 17   [行挿入]   [行削除]   _____________________________________________

 入力用のフォームとして上記のような表E8:K17があり17列に小計式、その下に同形式の表E18:K27、E28:K27…と続くとします。
 基本はそれぞれ10列にしているのですが、その都度C17(C27,C37…)に行挿入ボタン、 
 D17(D27,D37…)に行削除ボタンをつけて、行挿入ボタンをクリックすると16行をコピーしたものを、
 17行の一つ上に挿入、というマクロができないかと思うのですが、普通に「新しいマクロの記録」から作成すると、
  Sub 行挿入()
    Rows("16:16").Select
    Selection.Copy
    Rows("17:17").Select
    Selection.Insert Shift:=xlDown
    ActiveSheet.Paste
    Application.CutCopyMode = False
  End Sub
 と、なって1行挿入は問題ないのですが、常に16行がコピーされて17行の上に挿入される
 ことになり、データーを更新していく上で不都合が出ます。
 行挿入をした場合に「行挿入ボタン」及び小形式、罫線の入っている行番号は動きますが、
 常に「行挿入ボタン」のある一つ上の行(数値未入力)がコピーされて挿入されるようにできますでしょうか?

 ついでに行削除は普通の作業でやってもそれほど手間ではないのですが、応用で
 「行削除ボタン」でボタンのある行の上1行(未入力)が削除できればと考えました。

 よろしくお願いいたします。


 Sub 行挿入()
      Dim myRow As Long
      myRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
      Rows(myRow).Insert shift:=xlDown
      Rows(myRow - 1).Copy Destination:=Rows(myRow)
 End Sub
 
フォームツールバーのボタンなら上記が一例。ボタンに「行挿入」をマクロ登録。
 
コントロールツールボックスの場合は、CommandButton1_Clickのプロシージャは
コマンドボタンごとにボタン名を変えて作成する必要があります。
 
 Private Sub rowinsert(ByVal myR As Long)
     Rows(myR).Insert shift:=xlDown
     Rows(myR - 1).Copy Destination:=Rows(myR)
 End Sub
 
 Private Sub CommandButton1_Click()
     Dim myRow As Long
     myRow = Me.CommandButton1.TopLeftCell.Row
     Call rowinsert(myRow)
 End Sub
 
【参考】 Application.Caller関係
[[20040622102050]] 『ボタンにについて』(ショウ)
[[20040908153033]] 『クリックひとつでチェックしたいのですが』(あげ)
[[20041103121918]] 『二重線を書き込みたい』(MATU)
[[20050310145427]] 『クリックしたボタンの位置の値を使いたい』(TY)
[[20050514151949]] 『マクロでオートシェイプを描く』(やん)
[[20060705153030]] 『Controls OnActionに設定する関数に引数を渡せるでしょうか』(タータン)
[[20060730160054]] 『ユーザーフォームのコマンドボタンをクリックしたら
[[20070224111112]] 『図形の背景色を反転させたい』(しみぽん)
[[20070519134745]] 『オートシェイプ○を選択したら色が変わる』(にい)
[[20080215151052]] 『挿入した画像ファイル名の表示』(みぃ)
[[20080220183157]] 『マクロ実行後マクロを実行させるテキストボックス付近のセルを選択したい』(あつし)
[[20080313170821]] 『ツールメニューからブックをアクティブにしたい』(どないやねん)
[[20080318145203]] 『マクロ実行ボタン以外のオブジェクトを消去』(まるぴ)
 
(みやほりん)(-_∂)b

 (みやほりん)さん、早速の的確なご回答、ありがとうございます。

 フォームツールバーボタンのコードにて有効利用させていただきます。

 ちなみに、またコードの意味をよく理解せぬまま応用させていただくと、
 行削除は以下のようにするととりあえず動きますが、問題なかったでしょうか?

 Sub 行削除()
       Dim myRow As Long
       myRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
       Rows(myRow - 1).Delete Shift:=xlUp
 End Sub

 (pore)

 問題に感じるのは
>意味をよく理解せぬまま応用
うーん。
基礎知識を現実の問題解決に用いることを応用、と言うのだと思うのですが。
期待通りに動いていれば、当面は、それでいいんじゃないですか。
 
(みやほりん)(-_∂)b

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.