• ベストアンサー

Excelでの行の挿入について

マクロについて教えて下さい。 例えばA1のセルに5と入力した場合に 3行目と4行目の間に5行挿入したいのですが・・・ マクロでなくても出来る方法があればそちらも教えて頂ければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

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

jun0617
質問者

お礼

大変役に立ちました。 有難うございました。

その他の回答 (7)

  • quit123
  • ベストアンサー率21% (4/19)
回答No.8

回答を検討し自分で考えることもせず、次から次へと丸投げをするこのような質問者へは、回答をしばし控えるべきではないでしょうか。 質問者のためにもならない。  

jun0617
質問者

お礼

「ために」なりました・・・(^^;

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

私は、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

jun0617
質問者

お礼

細かいご指摘有難うございます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

>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)
回答No.4

>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)
回答No.3

簡単なマクロです。 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

jun0617
質問者

補足

有難うございます!!出来ました。 申し訳ありませんが質問を追加させて下さい。 sheet1のA1のセルに任意の数字を入力すると sheet2の3行目と4行目の間にsheet1のA1に入力した数字分だけ、 行が挿入するにはどうすれば良いでしょうか?

回答No.2

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)
回答No.1

まず、マクロを使用しない場合は、 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

jun0617
質問者

補足

有難うございます。 マクロを実行した際にウインドウを立ち上げて挿入する行数を指定するのではなく、A1のセルに任意の数字を入力した後に、マクロを実行するとA1に入力した数だけ行数が増える様にしたいのですが・・・。