『マクロの応用を教えてください。』(hyu)
お世話になります。
恐縮ですが、どなたかお知恵を貸していただけないでしょうか。
とある集計表を作成しています。
取引先での売上、仕入、配達経費、粗利などをだしていくものです。
取引先が増えるたびに下に延びていく表となっており、これまでは新規に追加された取引先を、枠をコピーして作成しておりました。
かなり長くなってきてしまったので、スクロールとコピーの手間を考え、新規追加枠を最初から別シートに作っておき、これに入力したら自動で一番下に追加されるというマクロを記録したいと思っています。
例えば現在の一番下がA29だとしたら、A30に追加されるようにしたいのです。
しかしながら、マクロを普通に記録しただけだと、延々とA30に上書きされるだけになってしまいます。
これを、常に一番下に追加されるように出来ないでしょうか。
よろしくお願いいたします。
< 使用 Excel:Excel2021、使用 OS:Windows11 >
マクロを使用せずに「フォーム機能」では駄目なの? (はてな) 2026/03/30(月) 11:06:01
A列のデータがある最終行の下のセル(Rangeオブジェクト)は、以下のように書けます。
Dim rng As Range
Set rng = Cells(Rows.Count, "A").End(xlUp).Offset(1)
これを元にコードにトライしてみて下さい。
もし、うまくいかなければ、 >新規追加枠を最初から別シートに作っておき、これに入力したら自動で一番下に追加される の新規追加枠とは何かというのをレイアウトとともに説明したり、 マクロ記録の結果を示してください。 (説明がないと、こちらは千里眼を持ち合わせないので訳がわかりません。)
(xyz) 2026/03/30(月) 11:53:09
xyz様
教えていただきありがとうございます。
コードにトライということは、VBAに入力ということですよね?
説明が足りず申し訳ないです。表は下記のようなものになります。
A B C D E F
1 取引先名 1月 2月 3月 4月 5月
2 売上数 数字 数字 数字 数字 数字
3 仕入値 数字 数字 数字 数字 数字
4 経費 数字 数字 数字 数字 数字
5 粗利 数字 数字 数字 数字 数字
:
というような形です。
この1行目から5行目までを1取引先の枠として、下に延々と伸びていきます。合計シートと呼んでいます。
新規追加用のシートに空白枠を作っておき、そこに入力したら合計シートの一番下に追加されるようにしたかったのです。
判りにくくてすみません。
(hyu) 2026/03/30(月) 12:09:35
>マクロは記録ボタンで作りました。 でしたら、それをこちらに投稿してもらえば、それをもとに議論ができるんじゃないでしょうか。
(xyz) 2026/03/30(月) 12:34:06
Sub 新規追加()
'
' 新規追加 Macro
'
'
Rows("3:15").Select
Range("D3").Activate
Selection.Copy
Sheets("マクロ試し").Select
ActiveWindow.SmallScroll Down:=15
Rows("72:72").Select
ActiveSheet.Paste
Range("A72:A84").Select
Sheets("新規入力用").Select
Range("A3:C15,E3:E15").Select
Range("E3").Activate
Application.CutCopyMode = False
Selection.ClearContents
Range("A3:A15").Select
End Sub
(hyu) 2026/03/30(月) 12:43:02
こんな感じでしょうか。
Sub test()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng As Range
Set ws1 = Sheets("新規入力用")
Set ws2 = Sheets("合計用") 'シート名修正のこと
'新規入力枠から、合計用のA列最終行の次のセル以下にコピー
Set rng = ws2.Cells(Rows.Count, "A").End(xlUp).Offset(1)
ws1.Rows("3:15").Copy rng
'新規入力枠の消去
ws2.Range("A3:C15,E3:E15").ClearContents
' ws2.Range("A3:E15").ClearContents 'D列を特別視する理由が不明です
''[追記,注意]ここはws1を使うべきところ誤記したものです。
End Sub
薄いテキストで良いので学習されるとよいのでは? (xyz) 2026/03/30(月) 13:12:37
ありがとうございます…!
いただいたコードをそのままコピーさせてもらったのですが、「400」というエラーが出ます。
また、最後に新規入力用シートを空白に戻すところまでコードに組みたいのですが、どうすればいいでしょうか?
この問題が片付いたら、おっしゃる通り少し勉強してみようと思います。
よろしくお願いいたします。
(hyu) 2026/03/30(月) 14:27:27
ここについですが、いただいたコードではA3〜C15、E3〜E15がうまく消えない状態です。
(hyu) 2026/03/30(月) 14:51:05
失礼しました。
シートを間違えていました。
'新規入力枠の消去
ws1.Range("A3:C15,E3:E15").ClearContents
に修正してください。
合計用のほうを消去してしまっているので、 データをもとに戻して下さい。
# テスト検証してませんでした。済みません。
ついでに言うと、
こちらも行全体ではなく、範囲を限定したほうが良いと思います。
ws1.Rows("3:15").Copy rng
↓
ws1.Range("A3:E15").Copy rng
のように。
(xyz) 2026/03/30(月) 15:01:38
出来ました…!!
お手数をおかけいたしました。
本当にありがとうございました。
これから自分でも勉強いたします。
助かりました。
(hyu) 2026/03/30(月) 15:20:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.