- ベストアンサー
常に特定の行の上に新規行挿入するマクロ
A , B 1: 1月,1000円 2: 2月,2000円 3: 計,SUM(B1:B2) 4: 月, 円 という表があります。 4行目を常に計行(上記の場合は3行目、仮に3月分まで入力している場合は4行目になる)の上に挿入し、合計は挿入行分も含まれる、というマクロは可能でしょうか? ご存知の方おられましたらご教授願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こうかな? Sub aaa() Dim ws As Worksheet Dim rge As Range Dim r As Long Set ws = ActiveSheet Set rge = ws.Range("A:A").Find("計") 'A列で検索 If rge Is Nothing Then Exit Sub '見つからない場合は中断 r = rge.Row '見つかったら行番号を取得 '計というセルに挿入 ws.Range("A" & r & ":B" & r).Insert xlDown 'コピーする ws.Range("A" & (r + 2) & ":B" & (r + 2)).Copy '値だけ貼り付け ws.Range("A" & r & ":B" & r).PasteSpecial xlPasteValues '合計欄の更新も忘れずに ws.Range("B" & (r + 1)).Formula = "=sum(B1:B" & r & ")" End Sub
その他の回答 (3)
- web2525
- ベストアンサー率42% (1219/2850)
質問内容に矛盾点が >4行目を常に計行の上に挿入 質問文の例にこの動作を行うと合計行が4行目になりますよね、次にマクロを実施すると4行目の合計行の上に合計行を挿入する形になってしまいます。 A , B 1: 1月,1000円 2: 2月,2000円 3: 3月,3000円 4: 計,SUM(B1:B2)SUMの引数がどう変化するかは不明ですが 5: 計,SUM(B1:B2) こんな形になりますが、これが目的ですか?
補足
説明不足ですいません。 初期の状態では4行目ですが、マクロを行うごとに1行ずつ下がりますので1回行うと5行目、2回行うと6行目をコピーして挿入、といった形になります。ですので1回行った場合の表示が A , B 1: 1月,1000円 2: 2月,2000円 3: 3月,3000円 4: 計,SUM(B1:B3) 5: 月,円 で、次は5行目を4行目の上に挿入して A , B 1: 1月,1000円 2: 2月,2000円 3: 3月,3000円 4: 4月,4000円 5: 計,SUM(B1:B4) 6: 月,円 という形にしたいのです。
- soixante
- ベストアンサー率32% (401/1245)
Sub aaa() Dim i As Integer, j As Integer Dim kei As Long i = Cells(Rows.Count, 1).End(xlUp).Row Rows(i - 1).Insert Rows(i + 1).Cut Rows(i - 1) For j = 1 To i - 1 kei = kei + Cells(j, 2).Value Next j Cells(i, 2).Value = kei Cells(i + 1, 1).Select End Sub ご質問の意図に合ってますでしょうか。
お礼
6行目をcutでなくcopyにすると期待していたものに近くなりました! マクロは記録しかしたことがなくてVBA(?)はさわった事なかったんですが勉強になりました。まだ内容そのものは理解しきれてないんですが、解読してみます。 ありがとうございました。
補足
あと、マクロ実行後、計行の合計値がsum関数でなく、数値になってしまうのですが、これはsum関数で残しておくのは無理なんでしょうか?
- orangezzzz
- ベストアンサー率35% (401/1119)
おはようございます。 無理ですよ。マクロ(VBA)といっても万能ではありません。 ぜひ勉強して試してみてください。無理なことがわかります。 合計行の上を空けておけば、行挿入するだけで合計に含まれますから、ぜひそうしてください。
お礼
PCの苦手な上司達にマクロボタンで簡単に、と思ったもので・・・ でもどうにかなるものですね、マクロ・・・奥が深いです。
お礼
自力ではc列に補助的に関数使ってようやく完成できた・・・と思ってたのですが、 phoenix343さんの構文で完璧です!感動しました! 本当にありがとうございます。