• ベストアンサー

エクセルで列が自動挿入する明細書

エクセルVBAの勉強をしています。 見積明細書なのですが、横列は明細・数量・単位・単価・金額・備考の横並びセル群から成り、その明細行は下方へ数行繰り返されて、最後にそれらを合算する小計、消費税、合計金額行が来ます。 ここで聞きたいのが、数行程度の明細行+小計・消費税・合計行の簡単なものを作っておいて、最後の明細行に記入すれば自動的にもう一行の空欄明細行が挿入されて、小計行以下は計算結果を表示しつつ自動的に一行繰り下がる、というものはできるのでしょうか。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

yunako0517さん、こんにちは。merlionXXです。 1)について ByVal とは値渡しをするというキーワードです。 Private Sub Worksheet_Change(ByVal Target As Range)は、Worksheetで Changeイベントが発生したときに自動的に実行されるプロシージャです。 イベント発生時にRange オブジェクト(変更先の範囲)が引数に渡り、それをがTarget という変数に格納されます。 自動マクロでの記録は標準モジュールですが、シートモジュールにはシートでイベント発生時に自動実行するマクロを記述するのでこのように書きます。 2)について そうですか、明細欄に数式があるのですか・・・。 その数式がある金額欄がE列であり、1行目はタイトル行で2行目(E2セル)から数式があったとします。 以下のように変えてみてください。(各行ごとにコメントを付しておきました。コメントは’でコメントアウトしてありますのでこのままコピペしてもOKです。) Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False 'イベント発生を一時止める On Error GoTo line 'エラーが発生したらline:へ飛ぶ If Not Intersect(Target, Range("最終行").Offset(-1, 0)) Is Nothing Then '入力セルが「最終行」の1行上だったら以下を作動 Range("最終行").Offset(-1, 0).EntireRow.Insert '入力セルの上に1行挿入 Range("最終行").Offset(-2, 0).Value = Range("最終行").Offset(-1, 0).Value '挿入された行に入力値を代入 Range("最終行").Offset(-1, 0).ClearContents '値が重複する最終行の1行上をクリア r = Range("最終行").Row - 1 '最終行の1行上の行番号取得しrに代入 Range("E2").AutoFill Destination:=Range("E2:E" & r) 'E2セルから最終行の1行上までE2セルの式をAutoFill End If line: Application.EnableEvents = True 'イベント発生を回復 End Sub

yunako0517
質問者

お礼

ありがとうございます! できました~o(^ ^)o 1)についてもひとつひとつ単語の意味(値渡し?引数?変数に格納?などなど・・・)を調べつつ、何となくイメージでは分かったような…。 自分で応用して使いこなすのは、まだまだ先になりそうです(;^ ^)A 勉強します! またよろしくお願いしますm(_ _)m

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

#1です。 やはり、常に二行あけるのもなんなのでもう一度考えてみました。 これならご希望どおり、最後の明細行に記入すれば自動的にもう一行の空欄明細行が挿入されて、小計行以下は計算結果を表示しつつ自動的に一行繰り下がるはずです。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("最終行").Offset(-1, 0)) Is Nothing Then With Application .EnableEvents = False Range("最終行").Offset(-1, 0).EntireRow.Insert Range("最終行").Offset(-2, 0).Value = Range("最終行").Offset(-1, 0).Value Range("最終行").Offset(-1, 0).ClearContents .EnableEvents = True End With End If End Sub

yunako0517
質問者

お礼

ありがとうございます! こういうのを求めていました。 ただ、知識不足でコードの中身が分からないのですが、教えていただけるでしょうか? 1)1行目の(ByVal Target As Range)は何を表しているのですか?   自動マクロで作ったコードは、いつも『Sub マクロ名()』となっているので。 2)私の書き忘れなのですが、金額欄は数量×単価の数式が入っています。   この数式が入った行を挿入するには、どうすればよいのでしょう? すみませんが、教えてください。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

こんにちは、面白そうですね。 最終行の計算では当然それより上の行のセルを参照してるのですよね。 それならば、ご要望とはちょっと違いますが、最終行の2行上に入力があったら行が自動挿入され、最終行の参照範囲も1行分自動で広がる方法です。(つまり明細と小計の間には常に2行の空白行ができます) それでよければ以下の手順をお試しください。 1.明細書が使っている範囲が仮に、明細・数量・単位・単価・金額・備考でA~F列としたら、最終行のA~F列に「名前の定義」で「最終行」と名前を付けてください。(行を挿入しても範囲を特定するためです。) 2.標準モジュールではなくシートモジュールに以下のコードをコピペします。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("最終行").Offset(-2, 0)) Is Nothing Then Range("最終行").Offset(-1, 0).EntireRow.Insert End If End Sub

関連するQ&A

  • 次のような見積書フォームを作成することは可能でしょうか。

    よくある見積書の形式通りなのですが、明細行は内容・明細・数量・単位・単価・金額・備考の横並びセル群から成り、その明細行は下方へ適当回繰り返されて、最後にそれらを合算する小計行が来ます。 そこでご質問は、3行程度の明細行+小計行の簡単なものを作っておいて、最初の一行を記入すれば自動的に4行目の空欄明細行が生成されて、小計行は計算結果を表示しつつ自動的に一行繰り下がる、というものは可能でしょうか。同様に2行目を記入すれば新しい明細行の5行目を小計行の一段上に生成したいのです。 エクセルで見積書を作ってあげるのですが、見積が大量になった時に明細行が不足するのを恐れてPC上でトイレットペーパーのように長大な見積用紙を用意した挙句にオートフィルタを使って短縮表示するという無駄と使いにくさを解消したいのです。 

  • Excelで請求書を作成、印刷の際に条件が。

    お世話になります。 Excelで請求書を作成しようとしています。 1枚目の上部には、請求先と弊社の住所や振込先、請求合計金額等を記入し、その下にズラっと商品明細を打ち込んでいきます。最後に小計と消費税、全体の合計を入力する所があります。 (1)一番左の列に行番号を入れているので、予め行番号だけ入力しておき、商品明細を打ち込んだ行のみ印刷したいです。 (2)印刷する時に、1枚目は上部の住所等と商品明細、2枚目以降は商品明細のみ、商品詳細の最終ページで小計、消費税、合計の印刷をかけたいのです。 今はとりあえず、シートに分けて入力をして、それぞれ印刷をかけているのですが、計算が大変なのと、商品の明細がどのくらいになるのか、予め分からないので、入力するにも考えながらやっています。 何か良い方法はありませんか?宜しくお願いします。

  • エクセルでの文字列自動挿入

    エクセルで明細書を作成し、明細書の行数が何行であっても最後の行に「以下余白」と自動で挿入させる方法はありませんでしょうか? 当方素人ですが、よろしくお願いいたします。

  • Excel の計算式について

    Excelにて請求書を作成中なのですが 「商品名」 「単価」 「数量」 「金額」   と項目があります 「単価」×「数量」=「金額」の計算にて 小計を出し、消費税計算して合計を出すものは作れたのですが 商品名欄に「消費税」と入力した際に その上の行までの小計に対した消費税計算をしたいのです 場合によっては4行目に「消費税」がくるかもしれないし 10行目にくるかもしれません 商品名に「消費税」という文字を入力した場合は消費税計算、 それ以外の文字の場合は金額計算をするような計算式はできますか? あれば教えてください 当方Excel2003です よろしくお願いします

  • ActiveReportsで明細/合計の割合

    お世話になります。 VB.NET2008、Oracle11g、ActiveReportsでのクラサバシステムです。 VBで取得したDatasetをActiveReportsのdatasourceに設定するという スタンダードな方式で開発を行なっています。 今回はレポート側には極力コーディングしないという方針なのですが、 おそらくコーディングする必要が出てきましたので質問させていただきます。 Reportの構成はGroupを1つ追加しただけのもので、グループ毎の小計と 最後に合計を表示するものです。 例として、"配達先会社"がグループ1、詳細項目には"配達先社員"があり、 "配達先社員"の明細金額の"配達先会社"毎の計を小計として表示、 全ての会社毎の総合計を最終行に表示します。 ここまでは特に問題ありませんが、ユーザーの要望で、合計金額を100%として、 各明細行と小計行に金額と代金金額小計の%を表示する事になりました。 小計、合計をプログラム側で行なうのであれば特に問題はありませんが、 現在のレポートの構成を変えずに%項目だけを追加するにはどういった 方法があるのかご教授願えませんでしょうか。 Formatイベント等で合計行と各明細行、小計行のtextを取得しながら 計算する事になるんでしょうか?

  • エクセルで納品書を作ってます。

    項目が多い時もあるのでシート3枚に同じ納品書を作りました。 1枚の時は行の一番下の小計に消費税を掛けたものと、小計と消費税額を足した合計を出せるのですが、項目が多く次のシートにまたがるときにどのように関数を使うのさっぱりわかりません。 たとえばシート2まで使うとします。 シート1と2の小計をシート2のみに出るようにし、消費税と合計はシート1に表示したいのです。 すみません。きっと簡単な質問だと思います(*^。^*)

  • EXCELの数式設定の仕方が分からない

                A        B    ┏━━━━━┳━━━━━━━┓ 1  ┃        ┃       100┃    ┣━━━━━╋━━━━━━━┫  2  ┃        ┃       100┃    ┣━━━━━╋━━━━━━━┫ 3  ┃小計     ┃       200┃    ┃━━━━━╋━━━━━━━┫ 4  ┃消費税   ┃         ?┃    ┣━━━━━╋━━━━━━━┫  5  ┃税込合計 ┃          ?┃    ┗━━━━━┻━━━━━━━┛ 今エクセルで上のような表を作っています。 本当はもっと長い(B1~B30くらいの)表なのですが、 簡略化して書きました。 小計はオートSUMで出せるのですが、 「消費税」の隣の?の所に、小計200円の消費税である「10」を 自動で計算し表示するようにしたいのですが、どのようにしたら 表示されるようになるのでしょうか?? あと、「税込合計」も同様に、?の所に自動で計算されて 税込合計である「210」を表示されるようにしたいです。 分かる方、ご教授お願いしますm(__)m

  • エクセル計算

    エクセルで請求書を作成しましたが、非課税の明細も入っています。 合計金額は、課税非課税の合計金額ですが消費税の自動計算するのに課税の金額を合計したものに、消費税の5%をかける数式の入力の仕方を教えてください。 数式で言うと 例:(C3+C4+C5)×0.05=です。(可能であれば、切り捨ても含めて) よろしくお願いします。

  • エクセルで売上管理

    以下のようなデータを作成し、集計を自動で行いたいのですが、最適な数式やマクロなどはありますか?ご教授ください! 条件 1.集計は「現場ごとの合計額(消費税込)」、「集計日毎に(小計)(消費税)(合計)」 2.集計日は任意で指定した日(シートごとに異なる) (図)※タイトル行の「」部分の合計を求めたいです。 日付 現場 職種 人数 「売上額」 残業(時間) 単価 「残業金額」 「他売上1」 「他売上2」 5/1  あ   イ   1    15000 5/2  あ   ロ   2    24000    2     2000   4000 5/3  お   イ   2    30000                        3000    1000 5/7  え   ハ   1    15000    5/8  お   ロ   2    24000 5/10 え    ニ   1    15000    5     3000   15000            2000 集計すると・・・ (集計日毎) 5月集計 小計   148000 消費税  11840 合計   159840 (現場毎) 5月集計 あ  46440 え  50760 お  62640 合計 159840 ・・・となりますが、この集計部分を自動で計算したいです。 よろしくお願いします。

  • エクセルで。。。。

    小計    2300 消費税5%   115 値引     -15 合計    2400 となるときの値引き部分を自動に端数だけきる数式というのはあるのでしょうか? そんな事ができたら便利だなぁ~と思いましたが・・・・(-_-;)

専門家に質問してみよう