• ベストアンサー

VBA超初心者の参照に関するご質問です

VBAの超初心者ですが、請求書を作っているところです。 A列はボタンを置くためだけに作った欄外列です。 ある任意行のAセルにボタンを置いています。 ご質問は; そのボタンを押せばアクティブセルが現在どこにあってもそのボタンが置いてある行の直ぐ下に一行挿入される。その挿入行は、例えばNo1行に書式を埋め込んだセル群を置いてあり、その行を参照してコピー・ペーストする という記述はどう書けば良いでしょうか。 アクティブセルを行の特定場所に置けばそこからの相対参照が出来ますが、「アクティブセルがどこにあっても」という記述が良く解りません。

noname#96725
noname#96725

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

おおよそのところは 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のあとに貼り付ければよい。

noname#96725
質問者

お礼

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

noname#96725
質問者

補足

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

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

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) とすれば、その間を増やしても、引数の範囲は変化していきます。

noname#96725
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >「アクティブセルがどこにあっても」 まったく、アクティブセルは関係ないのではありませんか? ボタンの位置の問題だと思います。 ボタンの種類が書いてありませんが、一般的に、コントロールツールのボタンだと解釈いたします。(なぜかというと、改編は、製作者だけができるからです。) 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) が不要な場合があります。  +-----+  |   |  +-----+  ←ここが、セルの境目に掛かっている場合

noname#96725
質問者

補足

ウエンディさん、いつもありがとうございます。自分で記述出来るようになるまではかなり掛かりそうですね。アクティブセル位置は無関係なのですか?。ボタンを押すこととボタンがあるセルを選択することとは無関係のはずだと思い、相対位置は最初に選択されていたセルからの乖離で決定すると考えていました。 増行させる為のボタンはフォームのオプションボタンを行頭に置いて、増行するたびにボタンも繰り下がらせる予定です。各項目のトータルは小計の直ぐ上の見積行を非表示にして使わないでおけばシグマは途中が何行増えても常に有効ですから何も記述をしなくて良いようです。(増行による選択範囲の変更記述が解らなかった為の苦肉の策) ご回答の記述はこれから研究します。

関連するQ&A

  • Excel VBA Cells 絶対参照 書き方

    Excel VBAにてお尋ねいたします。 Excel VBAにてCellsを使用してセル範囲を指定させていただく際に、絶対参照($A$1:$E$10など)を使用する場合はどのように記述すればよろしいでしょうか? Cellsを使用するのは、セル範囲が毎回異なるため、範囲指定に変数を使用しているためです。 相対参照でしたら、Range(Cells(1,1),Cells(Rows<行番号の変数>,Cols<列番号の変数>))といった記述かと思いますが、絶対参照の場合はどのように記述すればよろしいでしょうか?

  • エクセルのVBAのコード内で指定セルを相対参照する方法をお教えください。

    ActiveCell.Offset(0, 2).Range("A1:C1").Select 前記のコードは選択範囲をアクティブセルより相対参照にて指定するものですが、下表にてアクティブセルをA1として、コード内のC1に換えてA1(アクティブセル)の数値によって選択範囲とするセル数を指定するにはどうしたらよいでしょうか?(アクティブセルをA2,A3とした実行結果を2,3行のようにしたいのです)  A B C D E F 1 3 * * * 2 4 * * * *  3 2 * *

  • Excel VBAの相対参照について

    Excelで相対参照を勉強しようと思い、 A3を選択後 1.A3:F3を選択 2.A3:F3に黄色の網かけを設定 3.A5を選択 を相対参照で記録しました。(記録は1.~3.までです) VBAを確認すると Sub 罫線() ActiveCell.Range("A1:F1").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveCell.Offset(2, 0).Range("A1").Select End Sub という記述があったのですが、 なぜ、ActiveCell.Range("A1:F1").Selectと ActiveCell.Offset(2, 0).Range("A1").Selectというものがあるのでしょうか。 僕は、A1:F1の選択はしていませんし、網掛け後はA5を選択しているのに Range("A1").Selectの記述もよくわかりません。 ActiveCell.Offset(2, 0).Range("A1").Selectというのは 「選択したA1のセルから2行下、0列めを選択」と読めそうですが、 相対参照ならではの記述があるのでしょう。 ご存知の方、教え下さい。

  • 参照先セルの番地を固定したいのですが

    EXCELです。参照先セルの番地を固定したいのですが、行を挿入したりすると参照元の数式が自動的に変更されてしまいます。 たとえばA1に=A10の式が入っていたとします。 5行目あたりに行を一行挿入します。 そうするとA1の式は=A11となってしまいます。 =$A$10としても同様に=$A$11となってしまいます。 常にAの10行目を参照したい場合どういう式を立てたらよいのでしょうか。

  • "VBAの繰り返し"についてお尋ねします。VBA初心者です。

    "VBAの繰り返し"についてお尋ねします。VBA初心者です。 例えば「A列の最後のセルに何か入れば、その行のB列、C列・・・の一つ上のセルに入っている計算式を繰り返しコピーする」と言うコードを教えていただけたらと思います。A列の最後のセルに何か入ってくれば、その行の一つ上のセルに入っている計算式を繰り返しコピーするというコードです。コード記述の例を教えていただけたらと思います。よろしくお願いします。

  • エクセルのVBA 相対参照についての質問です。

    エクセルのVBA 相対参照についての質問です。 VBA初心者ですが、困っております。 難しいのですが、詳しい方にご教示頂けると幸いです。 【分らない点】 アクティブセルに対応して、別のシートからそのアクティブセルと同じ列にあるセルの値を参照する。 【前提設定】 (1)工事金額のデータベースとなるシート(数か月分の工事金額・階数が記載)、予定表となるシートがある。 (2)予定表にはデータベースから値を参照したいが、いつ工事が発生するか、どの階数なのか、は分からない。 (3)予定表の○月・○階数の部分にセルを置き、VBAを実行すると、その階数に対応する工事金額を、そのアクティブセルの位置から貼り付けたい。 【具体例】(アンダーバーは無視してください) データベースシート __1カ月 2カ月 3カ月 4カ月 1階_12_13__14__15 2階_25_26__27__28 3階_31_32__33__34 4階_44_45__46__47 予定表シート __1月 2月 3月 4月 5月 6月 1階 2階___25 26 27 28 3階 4階___ _44 45 46 47 ※上は理想イメージで、予定表の2月の2階にアクティブセルを置き、マクロを実行したとき、データベースの2階の1カ月目~4カ月目の工事金額のデータを参照した場合。 4階は3月から工事が発生し、対応する4階の工事金額を参照した場合。 データベースは常に1カ月目からの参照が必要です。 【不明な点】 『アクティブセルと同じ列』での『異なるシート』からの参照ができません。 アクティブセルの位置は変わるのに、自分でマクロを組むと、異なるシートの同じ位置から常に参照されてしまいます。 自分でも試したのですが、うまく参照されません。 わかり辛い例ですが、ご教示頂けると幸いです。 よろしくお願い致します。

  • 【VBA】絶対セル参照の記述

    早速質問させていただきます。 ActiveCell.FormulaR1C1 = "=SUM(R2C:R[-1]C)"のように記述すると、=sum(A$2:(関数を記入する1つ上))のように、左側部分が行固定になってしまいます。行固定をしないで記述する方法はありますか?sum関数を入れるセルからの相対参照は、データの総数が都度変化しますのでできません。 よろしくお願いします。

  • エクセルで条件付き書式で相対参照にするには

    条件付き書式で下のセルの値と比較し条件が合致したら色を変更するというのを同じ列の複数のセルでしたいのですが、相対参照になりません。 例えばA1で条件付き書式で比較するセルを「A2」とした後、A1セルを「コピー」しA列の他のセルに「貼り付け」→「形式を選択して貼り付ける」→「書式」しても比較するセルが「A2」のままです。 これをA3なら比較するセルをA4に、A4ならA5にというようにそのセルと下のセルとを比較するようにしたいのですがどうすればいいでしょうか?

  • EXCEL2007について質問です

    $B4*C$1の数式をコピーするとき、以下の質問に答えてください。 質問1:$B4のように列は絶対参照・行は相対参照の組み合わせの場合は、B(列)は絶対参照だからBを必ず参照し、行は相対参照だから数式が入力(コピー)されたセルを基準として、数式が入力された行と同じ行のセルを参照する。 つまり上記から、$B4をコピーする場合、必ず「B列の中で数式が入力された行と同じ行を参照する」、こういうことでしょうか? 質問2:C$1のように、列は相対参照・行は絶対参照の組み合わせは、C(列)は相対参照だから数式を入力(コピー)した位置を基準として、数式が入力された列と同じ列のセルを参照し、$1は絶対参照だから、必ず1行目を参照する。 つまり上記から、C$1をコピーする場合は、必ず「数式を入力セルと同じ行番号の1行目を参照する」、こういうことでしょうか?

  • 条件付き書式での相対参照について

    こんにちは いつもお世話になっています。 エクセル2007を使っています。 条件付き書式で相対参照にできずに困っています。 条件内容は生徒名毎に5教科内での上位1位のセルの背景色を赤、下位1位のセルの背景色を青です。 A列に番号、B列に名前、C列-G列に教科ごとの得点が入力されています。 生徒名毎にC-Gセルに条件付き書式を設定してあります。 例えば C3-G3セルを選択し、条件付き書式を以下のようにしてあります。 ルール1:上位1位、書式をセル背景色赤、適用先=$C$3:$G$3 ルール2:下位1位、書式をセル背景色青、適用先=$C$3:$G$3 このままだと下の行に書式をコピーすると失敗します。 手動で$C3:$G3としても、適用すると絶対参照に戻ってしまいます。 条件付き書式でなくとも上記のような条件内容を実現できればいいのですが、御教授お願いいたします。

専門家に質問してみよう