VBAのご質問です。 I12から毎月100行(月により変動)くらいの数字が入っております。 38行ごとに合計をだすマクロのコードを教えてください。

画像

Visual Basic23閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

素晴らしいです!!!朝から感動してしまいました! 9.9999割できあがっております! ただ…最後一つ解決させて頂きたいことがございます。 画像の通り、最終行から1行あけたところに納入合計を入れてあります。 そのうえに小計を出すにはどうしたらよいでしょう… (先にご説明せず本当に申し訳ございません・・・) 品目数が多い請求書に限っては、途中で小計を出すルールになっております。少ないものは38行ごとに小計を出さなくていいルールなので、デフォルトで画像の通り”納入合計”を最終行の1行あとに コードを組んであります。 品目数が多いものに限り、ボタンで小計を出せるようにするという感じです…うまく説明ができないのですが、もう少しでできそうでできないところで助けて頂けたら嬉しいです。

画像

ThanksImg質問者からのお礼コメント

非常にわかりやすいコード、そしてご指導頂きましてありがとうございました。少しひねられるとどうしたらいいのかわからなく、こういうのはどのように学んだらいいのかと思っております。応用がきかないレベルなので、F8でイメージをつかんで習得できたらと思います。非常に勉強になりました。ちなみに、SUMIFはつかわず値にで出していたので、最終行を一つずらすだけで解決致しました。この度本当にありがとうございました

お礼日時:7/24 5:41

その他の回答(1件)

0

Sub Example() Const シート名$ = "Sheet1" Const 対象列$ = "I" Const 開始行& = 3 Const 間隔& = 38 Const 挿入範囲$ = "G#:I#" Const 挿入式$ = "=SUBTOTAL(9,I#:I@)" Dim ws As Worksheet: Set ws = Worksheets(シート名) Dim 最終行&: 最終行 = ws.Cells(Rows.Count, 対象列).End(xlUp).Row Dim 行数&: 行数 = 最終行 - 開始行 + 1 Dim i&: i = 最終行 - (行数 Mod 38) ws.Range(Replace(挿入範囲, "#", 最終行)).Copy ws.Range(Replace(挿入範囲, "#", 最終行 + 1)).PasteSpecial (xlPasteFormats) ws.Cells(最終行 + 1, 対象列) = Replace(Replace(挿入式, "#", i), "@", 最終行) ws.Cells(最終行, 対象列).Offset(1, -1) = "小計" Do While i > 開始行 ws.Range(Replace(挿入範囲, "#", i)).Insert ws.Cells(i, 対象列) = Replace(Replace(挿入式, "#", i - 間隔), "@", i - 1) ws.Cells(i, 対象列).Offset(, -1) = "小計" i = i - 38 Loop End Sub

冒頭のConstの値を適宜変更してお使い下さい。 >Const 対象列$ = "I" 計算の対象になる列 >Const 挿入範囲$ = "G#:I#" 小計行を挿入する際の列の範囲。 "G#:I#"は表がG列から始まってI列で終わる場合。 Const 挿入式$ = "=SUBTOTAL(9,I#:I@)"