プロが教える店舗&オフィスのセキュリティ対策術

VBAの超初心者ですが、請求書を作っているところです。

A列はボタンを置くためだけに作った欄外列です。
ある任意行のAセルにボタンを置いています。

ご質問は;
そのボタンを押せばアクティブセルが現在どこにあってもそのボタンが置いてある行の直ぐ下に一行挿入される。その挿入行は、例えばNo1行に書式を埋め込んだセル群を置いてあり、その行を参照してコピー・ペーストする

という記述はどう書けば良いでしょうか。
アクティブセルを行の特定場所に置けばそこからの相対参照が出来ますが、「アクティブセルがどこにあっても」という記述が良く解りません。

A 回答 (3件)

おおよそのところは


VBEの画面のProjectのSheet1をダブルクリックして、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
が出てくると思いますが、
(3)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then
Rows(Target.Row).EntireRow.Insert
End If
End Sub
で良いと思うのですが、
>例えばNo1行に書式を埋め込んだセル群を置いてあり、その行を参照してコピー・ペーストする
の意味が良くわかりません。
Sheet1のシート全体の第1行目の値をコピーするのでしょうか。
書式だけをコピーするのでしょうか。
マクロの記録をとれば、そのコードはわかります。
(1)
Sub Macro1()
Rows("1:1").Select
Selection.Copy
Rows("15:15").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
これをRows("15:15").Select
で、挿入後のSelectionを崩さないようにするため
(2)
Sub Macro1()
Rows("1:1").Copy
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
にして、上記(2)の中身を、(3)のInsertのあとに貼り付ければよい。

この回答への補足

いもがしさん、いつもありがとうございます。やっとVBAの入り口です。
ご回答記述の理解にかなり手間取ると思います。しばらくお待ち下さい。

コピペ云々の意味は;
見積書に必要な内容・単価・金額などの各セル毎に書式や関数を埋め込んだサンプル行をシートトップに置いて置き、デフォルトでは各項目ごとに1行しかつくらない見積行をボタンを押して増やしてはサンプル行をペーストし、それに値を記入したいのです。これをしたいばかりにVBAに挑んでいます。マクロ記録は簡単なのですがねぇ。

補足日時:2005/10/22 20:30
    • good
    • 0
この回答へのお礼

ご回答を理解しようとして気ばかりあせっています。どうやら私のご質問自体が私の能力を超えたものだったようです。折角頂いたご回答ですが、これは保存して将来に備えます。最初にご回答頂いたので良回答とさせて頂きますが、これに懲りずに又よろしくお願いします。

お礼日時:2005/10/29 11:53

mariocec様、こんばんは。



Formボタンの場合は、

RngAddress = ActiveSheet.Buttons(1).BottomRightCell.Offset(1).Address(0, 0)

このようになります。

>増行による選択範囲の変更記述が解らなかった為

Set Rng = Range("B2", Range("B65536").End(xlUp))
myAddress = Rng.Address

先頭が決まっていれば、このように範囲は取れますが、

例えば、B11:の場合は、

=SUM($B$2:$B10)

とすれば、その間を増やしても、引数の範囲は変化していきます。
    • good
    • 0
この回答へのお礼

折角頂いたご回答ですが、今の力ではどうやっても理解出来ませんでした。同じ結果が出るようなマクロ記録を考えてやり直します。これに懲りずに又よろしくお願いします。ご回答評価が出来ません、いもがしさんより半日遅れという理由だけで次点とさせて頂きます。

お礼日時:2005/10/29 11:54

こんにちは。



>「アクティブセルがどこにあっても」
まったく、アクティブセルは関係ないのではありませんか?
ボタンの位置の問題だと思います。

ボタンの種類が書いてありませんが、一般的に、コントロールツールのボタンだと解釈いたします。(なぜかというと、改編は、製作者だけができるからです。)

Private Sub CommandButton1_Click()
Dim RngAddress As String
RngAddress = CommandButton1.BottomRightCell.Offset(1).Address(0, 0)
  Range(RngAddress).EntireRow.Insert
  Range("A1").EntireRow.Copy
  Range(RngAddress).EntireRow.PasteSpecial xlPasteFormats
  Application.CutCopyMode = False
End Sub

なお、ボタンの位置によって、Offset(1) が不要な場合があります。

 +-----+
 |   |
 +-----+  ←ここが、セルの境目に掛かっている場合

この回答への補足

ウエンディさん、いつもありがとうございます。自分で記述出来るようになるまではかなり掛かりそうですね。アクティブセル位置は無関係なのですか?。ボタンを押すこととボタンがあるセルを選択することとは無関係のはずだと思い、相対位置は最初に選択されていたセルからの乖離で決定すると考えていました。

増行させる為のボタンはフォームのオプションボタンを行頭に置いて、増行するたびにボタンも繰り下がらせる予定です。各項目のトータルは小計の直ぐ上の見積行を非表示にして使わないでおけばシグマは途中が何行増えても常に有効ですから何も記述をしなくて良いようです。(増行による選択範囲の変更記述が解らなかった為の苦肉の策)

ご回答の記述はこれから研究します。

補足日時:2005/10/22 21:06
    • good
    • 0

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