- ベストアンサー
Excelでの行の挿入について
マクロについて教えて下さい。 例えばA1のセルに5と入力した場合に 3行目と4行目の間に5行挿入したいのですが・・・ マクロでなくても出来る方法があればそちらも教えて頂ければ幸いです。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
No3&5です。 さっきのだとA1に0以下を入れられるとエラーになってしまいますね。修正しました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub x = Target.Value If IsNumeric(x) = False Or x <= 0 Then Exit Sub Sheets("Sheet2").Rows("4").Resize(x).Insert Shift:=xlDown End Sub
その他の回答 (7)
- quit123
- ベストアンサー率21% (4/19)
回答を検討し自分で考えることもせず、次から次へと丸投げをするこのような質問者へは、回答をしばし控えるべきではないでしょうか。 質問者のためにもならない。
お礼
「ために」なりました・・・(^^;
- Wendy02
- ベストアンサー率57% (3570/6232)
私は、merlionXX さんと、ここで競い合っても本意ではないし、途中で条件が変っていくのに着いていくのは困難なので、この一回きりにさせていただきます。 なお、私のコードは、0や負の数や予想外に大きな数値が入ったときのエラーを想定しています。そのために、Integer にして、On Error ではじきだそうとしています。 前回の#4のコードを > Rows(InitialRow).Resize(intRowNum).Insert _ > Shift:=xlDown > 'Cells(InitialRow, 1).Resize(intRowNum).Insert _ > Shift:=xlDown 以下に換えてください。 Sheet2.Rows(InitialRow).Resize(intRowNum).Insert _ Shift:=xlDown 'Sheet2.Cells(InitialRow, 1).Resize(intRowNum).Insert _ Shift:=xlDown
お礼
細かいご指摘有難うございます。
- merlionXX
- ベストアンサー率48% (1930/4007)
>sheet1のA1のセルに任意の数字を入力すると >sheet2の3行目と4行目の間にsheet1のA1に入力した数>字分だけ、 >行が挿入するにはどうすれば良いでしょうか? 先程のマクロに行(Row)のある場所(Sheet2)を指定してあげるだけでOKです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If IsNumeric(Target.Value) Then For n = 1 To Target.Value Sheets("Sheet2").Rows("4").Insert Shift:=xlDown Next n End If End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
>A1のセルに任意の数字を入力した後に、 >マクロを実行するとA1に入力した数だけ行数が増える様にしたいのですが・・・。 つまり、挿入数も、挿入される位置も固定されているということでしょうか?もし、そうでしたら、#3 の merlionXX さんのような、イベント・ドリブン型のスタイルがよいのかもしれませんね。 設定方法は、#1 の時と同じです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim intRowNum As Integer '挿入される行数 Const InitialRow As Long = 4 '挿入される最初の行 With Target If .Address <> "$A$1" Then Exit Sub If IsNumeric(.Value) And .Value > 0 Then On Error GoTo EndLine intRowNum = .Value Rows(InitialRow).Resize(intRowNum).Insert _ Shift:=xlDown 'Cells(InitialRow, 1).Resize(intRowNum).Insert _ Shift:=xlDown End If End With EndLine: End Sub 前回と同じように、全体行でないのでしたら、Rows(IntialRow)の前に、「'」を付けて、Cells(IntialRow,1)の前の「'」を外してください。
- merlionXX
- ベストアンサー率48% (1930/4007)
簡単なマクロです。 A1のセルに任意の数字を入力すると自動的にマクロが走ります。 シートのタブを右クリックして「コードの表示」をし、以下をコピー&ペースト Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If IsNumeric(Target.Value) Then For n = 1 To Target.Value Rows("4").Insert Shift:=xlDown Next n End If End Sub
補足
有難うございます!!出来ました。 申し訳ありませんが質問を追加させて下さい。 sheet1のA1のセルに任意の数字を入力すると sheet2の3行目と4行目の間にsheet1のA1に入力した数字分だけ、 行が挿入するにはどうすれば良いでしょうか?
- harukabcde
- ベストアンサー率15% (94/610)
Sub 行挿入2() Dim r As Long r = Range("a1").Value If r = Empty Then MsgBox "取りやめます.": Exit Sub ActiveCell.Resize(r).EntireRow.Insert Shift:=xlDown 'ActiveCell.Resize(r).Insert Shift:=xlDown '全行でない場合は、EntireRowの入っている方を無効にし、入っていない方を有効「'を外す」にしてください。 End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
まず、マクロを使用しない場合は、 3行目にカーソルを置き、5行を選択して、右クリック-挿入 で、5行挿入されます。 マクロでしたら、 Sub 行挿入() Dim r As Variant r = Application.InputBox("挿入する行数を入れてください", Type:=2) If VarType(r) = vbBoolean Or r = "" Then MsgBox "取りやめます.": Exit Sub ActiveCell.Resize(r).EntireRow.Insert Shift:=xlDown 'ActiveCell.Resize(r).Insert Shift:=xlDown '全行でない場合は、EntireRowの入っている方を無効にし、入っていない方を有効「'を外す」にしてください。 End Sub
補足
有難うございます。 マクロを実行した際にウインドウを立ち上げて挿入する行数を指定するのではなく、A1のセルに任意の数字を入力した後に、マクロを実行するとA1に入力した数だけ行数が増える様にしたいのですが・・・。
お礼
大変役に立ちました。 有難うございました。