- ベストアンサー
”アクティブセル行」の一行下を選択”するマクロ
■ ”アクティブセルの、1個下の行を選択し、新しい空白行を一行挿入” ■次にその”アクティブセルのA列とB列の値を、 新しく作った空白行に、コピー ・・・といったマクロを組もうとしております。 たとえば 12行目を選択するプログラム(コマンド?マクロ?)は、 Rows(12:12) となっていたので、それにならって Rows(activecell:B) などとやってみたのですが、うまくいきませんでした。 このような場合、どうしたらよいのかアドバイスをいただけると助かります。 どうぞ、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
行の指定は 「Rows(行数)」 で行います。 例えば、5行目を選択するのであれば、 Rows(5).Select で動作します。 また、()内は変数で指定することが可能です。 選択しているセルの行数を取得するには下記のように行います。 現在選択しているセルは…「ActiveCell」 行の数値を取得するには…「.Row」 つまり、ActiveCell.Row と記述することで現在の行数を取得できます。 その値をRows()に入れてあげます。 Sub RowsInsert() Dim RowsNo As Long RowsNo = ActiveCell.Row + 1 Rows(RowsNo).Select Selection.Insert Shift:=xlDown Cells(RowsNo, 1) = Cells(RowsNo - 1, 1).Value Cells(RowsNo, 2) = Cells(RowsNo - 1, 2).Value End Sub Selectを用いた処理は時間がかかる要因になりますが、 長文で使用しないようですし、この程度の処理であれば動作に問題ないと思います。
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
rowsとか使うとご相談のように操作しにくいです。 また「セルをコピーしたい」のか,値の転記(複写)をしたいのかなど,具体的なヤリタイコトによって書きぶりが変わります。 作成例: activecell.offset(1).entirerow.insert cells(activecell.row + 1, "A").resize(1, 2).value = cells(activecell.row, "A").resize(1, 2).value
お礼
resizeとは、何の関数でしょうか・・・。 調べてみます。 とても勉強になりました。 ご回答、どうもありがとうございました!
- iapetus
- ベストアンサー率60% (248/413)
みなさん、速いし手慣れておりますなぁ。 とても勉強になります。 Excel VBAで迷うのは、命令が似通っていて、どの命令がどういう動きをするのだったか、迷うことでしょうか。 下記のMacro1とMacro2は、セル選択状態の1行をコピーし、その1行下に行の複写挿入するマクロです。 どちらも同じ結果になりますが、コピーを実施した後の痕跡(コピー元が点線、セレクトしたセル・行・列が太枠)が微妙に異なります。 なぜそうなるのかを、考えてみるのも、ExcelVBAの動作の理屈を知る勉強になりますよね。 Sub Macro1() Dim r As Long '行番号コントロール r = Selection.Row 'セレクト状態のセル行番号を取得 Rows(r).Copy '行コピー Rows(r + 1).Select 'r行目を行セレクト Selection.Insert 'r行目に挿入 End Sub ------------------------------------------ Sub Macro2() Dim r As Long '行番号コントロール r = Selection.Row 'セレクト状態のセル行番号を取得 Range(r & ":" & r).Copy '行コピー r = r + 1 '行番号に1加算 Range(r & ":" & r).Insert 'r行目に挿入 End Sub
お礼
それぞれの数式が、何を意味しているのかが、とてもわかりやすく助かりました。 ご回答、どうもありがとうございました!
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 Sub test() Dim i As Long i = Selection.Row Rows(i + 1).Insert Range(Cells(i, 1), Cells(i, 2)).Copy Destination:=Cells(i + 1, 1) Rows(i + 1).Select End Sub ※ 行すべてを選択いていますが、アクティブセルの1行下のセルを選択する場合は >Rows(i + 1).Select 部分を >Selection.Offset(1).Select としてみてください。 参考になりますかね?m(__)m
お礼
オフセット、というのが、どうやら良いようですね…。 どうも、ありがとうございます!
お礼
Cells(RR, 5) = Cells(RR - 1, 5).Value こちら、使わせていただきました・・・。 コピーをせずに、値を同じにできるのが嬉しいです…。 ご回答、どうもありがとうございました!