[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAを使って指定セルをコピー、最下行を増やして挿入』(ミー子)
似たようなvbaはあったのですが素人なもので上手く使えなくてコチラに書かせて頂きました。
2つ教えて頂きたいです。
1つ目が
ランダムなセルに入力がされているアクティブなシートでA18からQ18までをコピー
B列最下行の1つ上に行を挿入
そこのAからQにコピーしたものを貼り付け
2つ目は
B列最下行の1つ上の行を削除
といったものを作りたいのですが、ご教授頂けると嬉しいです。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
B列も入力のあるセルと無いセルがランダムにあります。
1番下の入力のあるセルから1行上の行削除が希望です。
(ミー子) 2022/01/18(火) 21:18
まずは、御自身が考えたものを提示して、どの部分がわからないのか説明されてはいかがでしょうか?
なお↓で必要な命令は【マクロの記録】で調べることができます。
A18からQ18までをコピー 行を挿入 コピーしたものを貼り付け 行を削除
(もこな2 ) 2022/01/18(火) 21:22
そのVBAをコピーして使ってみようとしたのですが結局うまく使えず・・・
又、マクロの記録もやってみましたが行数が指定される為、最下行を選択しての作業が出来ず。。
「修正」コピーするのはA18からQ18ではなく18行全体でした。
下記の状態で分からなくなりコチラに質問しました。
Sub VBA()
Rows("18:18").Select Application.CutCopyMode = False Selection.Copy 最終行 = Cells(Rows.Count, "B").End(xlUp).Row Selection.Insert Shift:=xlDown
End Sub
最下行に挿入したいのに19に挿入されてしまいます。
同様に削除の方も最下行を選択出来なかった為、最下行の削除できませんでした。
(ミー子) 2022/01/19(水) 07:58
Selection.Insert Shift:=xlDown これは選択しているところに行を挿入して元々のデータは一行下に下げるということですね。 あなたがやろうとしている目的に一致していますが、現実にはうまくいきません。
なぜなら、「選択しているところ」はあなたのコードでは、 Rows("18:18").Select のところで18行目を選択したままになっているからです。
コードの巧拙ははともかくとして、、
Rows("18:18").Select Application.CutCopyMode = False Selection.Copy 最終行 = Cells(Rows.Count, "B").End(xlUp).Row Rows(最終行 + 1).Select '←この行を追加 Selection.Insert Shift:=xlDown
このようにすればとりあえずは希望どおりになりませんか。 (try) 2022/01/19(水) 17:14
■1
>最下行に挿入したいのに19に挿入されてしまいます。
ちょっとよく分かりません。
「最下行」が何行目のときの話をされているのでしょうか?
■2
VBAの世界では基本的にシートやセル(オブジェクトと言います)を明示すればいちいちアクティブにしたり選択をしたりする必要はありません。
■3
提示されたコードを拝見すると、最終行の求め方はいくつかありますが、そのうち1つはもう理解されているということですね。
さらに、必要な命令はあらかた出揃っているようにおもいます。
例えば「■2」を踏まえて、"1つ目"に沿って組み合わせるとこんな感じになります。
Sub まくろ壱() Dim 最終行 As Long
With ActiveSheet 最終行 = .Cells(.Rows.Count, "B").End(xlUp).Row '←最終行を取得
.Rows("18:18").Copy '←(行全体を)コピーする命令 .Rows(最終行).Insert '←(コピーした行を)挿入する命令 Application.CutCopyMode = False '←コピーモードを解除する命令 End With End Sub
要は、最終行に1行まるごと挿入することで最終行が1行下がることになるので、結果として最終行の1行上に貼り付け(挿入)することになるわけですが、望んでいる動きはこのようなことではないのでしょうか?
なお、↑のとおりでよいのであれば↓でも同じ結果になります。
Sub まくろ壱_改() With ActiveSheet .Rows("18:18").Copy .Cells(.Rows.Count, "B").End(xlUp).EntireRow.Insert Application.CutCopyMode = False End With End Sub
■4
「■3」が理解できれば削除も同じ話ですよね。
最終行を特定してから削除すればよいだけです。
ただし↓の条件は良く考えないといけません。
>B列最下行の1つ上の行を削除
すなわち、"最下行"が1行目だった場合は0行目を削除することになり、エラーが発生してしまいます。
"最下行"が1行目になることはあり得ないということなら別によいですが、きちんと条件分岐をしておくほうが安全だとおもいます。
たとえばこんな感じです。
Sub まくろ弐() Dim 最終行 As Long
With ActiveSheet 最終行 = .Cells(.Rows.Count, "B").End(xlUp).Row '←最終行を取得 If 最終行 > 1 Then .Rows(最終行 - 1).Delete '←最終行が1より大きいときだけ処理 End With End Sub
(もこな2 ) 2022/01/19(水) 18:28
(ミー子) 2022/01/21(金) 10:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.