dポイントプレゼントキャンペーン実施中!

■ ”アクティブセルの、1個下の行を選択し、新しい空白行を一行挿入”



■次にその”アクティブセルのA列とB列の値を、
 新しく作った空白行に、コピー


 ・・・といったマクロを組もうとしております。

たとえば
12行目を選択するプログラム(コマンド?マクロ?)は、
 Rows(12:12)
となっていたので、それにならって
Rows(activecell:B) などとやってみたのですが、うまくいきませんでした。

このような場合、どうしたらよいのかアドバイスをいただけると助かります。

どうぞ、よろしくお願いいたします。

 

A 回答 (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を用いた処理は時間がかかる要因になりますが、
長文で使用しないようですし、この程度の処理であれば動作に問題ないと思います。
    • good
    • 0
この回答へのお礼

Cells(RR, 5) = Cells(RR - 1, 5).Value

 こちら、使わせていただきました・・・。
 コピーをせずに、値を同じにできるのが嬉しいです…。 
 
ご回答、どうもありがとうございました! 

お礼日時:2012/08/21 07:43

rowsとか使うとご相談のように操作しにくいです。


また「セルをコピーしたい」のか,値の転記(複写)をしたいのかなど,具体的なヤリタイコトによって書きぶりが変わります。

作成例:
activecell.offset(1).entirerow.insert
cells(activecell.row + 1, "A").resize(1, 2).value = cells(activecell.row, "A").resize(1, 2).value
    • good
    • 0
この回答へのお礼

resizeとは、何の関数でしょうか・・・。
調べてみます。
とても勉強になりました。
ご回答、どうもありがとうございました!

お礼日時:2012/08/21 07:41

みなさん、速いし手慣れておりますなぁ。


とても勉強になります。

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
    • good
    • 0
この回答へのお礼

それぞれの数式が、何を意味しているのかが、とてもわかりやすく助かりました。
ご回答、どうもありがとうございました!

お礼日時:2012/08/21 07:42

こんにちは!


一例です。

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
    • good
    • 0
この回答へのお礼

オフセット、というのが、どうやら良いようですね…。
どうも、ありがとうございます! 

お礼日時:2012/08/21 07:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!