- ベストアンサー
任意のセルに小計、合計と入力したら自動計算してくれ
エクセル2007でVBAを何度も挫折しています 任意のセルに小計、合計と入力したら自動計算してくれるVBAの方法を教えてください セル G21 商品名 L21 詳細 V21 数量 X21 単位 Z21 単価 AD21 金額(V21:数量*Z21:単価) の何処にでもある見積書なのですが 任意のG行に小計・合計と入力すると AD行に金額が自動で入力させるVBAの仕方が知りたいです。 3行ほどの見積もあれば100行を超える見積もあります 教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
シート名タブを右クリックしてコードの表示を選び,現れたシートに下記をコピー貼り付ける private sub worksheet_change(byval Target as excel.range) dim ta as range dim ha as range dim h as range dim d as range set ta = application.intersect(target, range("G22:G" & cells.rows.count)) if ta is nothing then exit sub for each ha in ta.areas for each h in ha if h = "合計" then cells(h.row, "AD").formula = "=SUBTOTAL(9,AD21:AD" & h.row - 1 & ")" elseif h = "小計" then set d = range(range("G21"), h.offset(-1)).find(what:="小計", after:=h.offset(-1), lookin:=xlformulas, lookat:=xlwhole, searchdirection:=xlprevious) if d is nothing then set d = range("AD21") cells(h.row, "AD").formula = "=SUBTOTAL(9,AD" & d.row + 1 & ":AD" & h.row - 1 & ")" set d = range(h.offset(1), cells(cells.rows.count, "G")).find(what:="小計", after:=h.offset(1), lookin:=xlformulas, lookat:=xlwhole, searchdirection:=xlnext) if not d is nothing then cells(d.row, "AD").formula = "=SUBTOTAL(9,AD" & h.row + 1 & ":AD" & d.row - 1 & ")" end if end if next next end sub G列に小計や合計と記入する。 合計はまぁ1つしか無いという事にして,小計は上下で重ならない範囲を計算することにします。これに伴い,既存の小計範囲に割り込んで小計を挿入した場合は,既設小計の範囲を縮小します。 2層以上の中計小計をしたいときは,アウトラインの機能などを組み合わせてエクセルが最初からもっている集計の機能などを使って下さい。 ていうか,一体どこからどこまでの小計を出させたいのかは,あなたが本来考えて必要なら「こうしたい」をご相談すべき内容です。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
>任意のG行に小計・合計と入力すると Gなどは列を指定するために使う。 だから何のいみかわからない。 数量X単価を出すなら、VBAで処理するにしても、 =Range("V21")*Range("Z21") あるいはセルにFormulaで式を入れる方法もある。 で良いのでは。 >小計・合計と入力すると なぜこういう文字列を入れる必要があるのか。 ーー 私が質問の意味を、誤解しているかも知れないが、原因はデータ例の構成を(数行で良いが)を質問文に書かないからだと思う。 ーーー これはどういう場面で計算するのか 1社の明細が入力を終わったとき? 1行のデータを入力が終わったとき? 何か合計ボタンに様なものをクリックしたとき?(<-小計、合計と入力したら、はこの意味か?) ーーー >3行ほどの見積もあれば100行を超える見積もあります これは1社辺りのことか。 ひょっとしてSUMPRODUCT関数で出来ることを言っているのか Σ単価X数量のいみで 単価X数量の行合計か?
- mu2011
- ベストアンサー率38% (1910/4994)
ワークシート関数でもできる事をVBAで実現しようとしている事はご質問者がVBAをマスターしたいという事と想定すると質問の丸投げはやめて挫折しているコード等を質問すべきと思います。
- mate0128
- ベストアンサー率30% (31/102)
VBAでなく、エクセルの普通の計算式を入れればいいですね。 AD21に「=V21*Z21」の数式を入れておけば、自動的に入りますが、普段は、非表示にしておくのであれば、IF関数を使います。 任意のG列を仮にG2とします。 それでAD21に次の式を入れます。 =IF(G2="小計",V21*Z21,"") これは、G2に小計と入力された場合、V21とZ21をかけた答えを表示する、という意味です。
- kuma56
- ベストアンサー率31% (1423/4527)
セル G21 商品名 ・・・・・AD21 金額(V21:数量*Z21:単価) これは見出し行で、その下にデータが入力されるという事でいいのかな?? >エクセル2007でVBAを何度も挫折しています ちなみに今回はどういうVBAを考えて、どこで挫折しているんでしょうか?? G行の最下段を選択して、その直情のデータ入力行(Ctrl+↑)へ飛んで >任意のG行に小計・合計と入力すると この位置を選び、そこから相対的に23セル右(ADxx)を選んで、AD22からの合計を出す式を入力する ・・・・・こんなんじゃ駄目かな??