• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 複数の行を挿入後、挿入以外を削除)

VBAで行を挿入後、挿入以外を削除する方法

このQ&Aのポイント
  • VBAを使用して、特定のセルに複数の行を挿入する方法と、挿入以外の行を削除する方法について知りたいです。
  • マクロを実行して行を挿入した後、行の並び方を整える方法について教えてください。
  • また、マクロで挿入した行以外の不要な行を削除するコードも教えていただきたいです。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

Sub 行挿入() Dim c As Range, n As Long Application.ScreenUpdating = False Worksheets("Sheet2").Activate For Each c In Worksheets("Sheet1").Range("A2:A5") n = c.Offset(, 1).Value Range(c.Value).Resize(n).EntireRow.Insert Range(c.Value).Resize(n).EntireRow.Interior.Color = c.Offset(, 2).Interior.Color Next Application.ScreenUpdating = True End Sub Sub 行削除() Dim i As Long, n As Long, add As String Application.ScreenUpdating = False Worksheets("Sheet2").Activate With Worksheets("Sheet1").Range("A2:A5") For i = .Rows.Count To 1 Step -1 n = .Cells(i, 2).Value add = .Cells(i, 1).Value Range(add).Resize(n).EntireRow.Delete Next End With Application.ScreenUpdating = True End Sub

nkmyr
質問者

補足

たびたびですみません。 上記のように単体で分けて、 「行挿入」のマクロを実行しても 「Rangeメソッドは失敗しました'_Global'オブジェクト」とエラーメッセージが出ます。

その他の回答 (7)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.8

>挿入した行以外を削除したかったのですが。 今日の挿入は理解されましたね、 では、次から行の削除にかかりましょう どの行を削除しますか、ルールなどありましたら詳しくお願いします。

nkmyr
質問者

お礼

ありがとうございます。 すみません、説明が難しくなりましたので、一旦終了させてください。 改めて再度質問させてください。 宜しくお願いします。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.7

>「行挿入」のマクロを実行しても >「Rangeメソッドは失敗しました'_Global'オブジェクト」とエラーメッセージ シート1にイメージ図の様に書かれていますか

nkmyr
質問者

補足

あ、そういうことでしたか。 同様にやってみました。 行挿入は出来ましたが、行削除は実行したのですが、挿入した行を削除したため、元に戻っただけでした。 挿入した行以外を削除したかったのですが。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

>削除の方は「Rangeメソッドは失敗しました'_Global'オブジェクト」 今回に対応する削除コードは提示していませんが

nkmyr
質問者

補足

下記のコードは何でしょうか? 行挿入後の行の削除だと思いました。 単体で実行しても 「Rangeメソッドは失敗しました'_Global'オブジェクト」となります。 Sub Test()   Dim c As Range, n As Long, LR As Long   Application.ScreenUpdating = False   Worksheets("Sheet2").Activate   For Each c In Worksheets("Sheet1").Range("A2:A5")     n = c.Offset(, 1).Value     Range(c.Value).Resize(n).EntireRow.Insert     Range(c.Value).Resize(n).EntireRow.Interior.Color = c.Offset(, 2).Interior.Color   Next   Application.ScreenUpdating = True End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>以下のコードを併用しましたが、「マクロを実行できません 提示したコードは、貴方が「値が変わるたびにマクロも修正するとなると・・・」 に対応すべくSheet1をUPしたイメージ図のようにする事で毎回コードを変更せずSheet1の値を変えることで対応できるのではとの提案です。 「以下のコードを併用しましたが」ではなく単体で実行してください。

nkmyr
質問者

補足

単体で実行しましたところ、行挿入はうまく出来ましたが、削除の方は「Rangeメソッドは失敗しました'_Global'オブジェクト」とエラーメッセージが出ます。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>値が変わるたびにマクロも修正するとなると、 Sub Test()   Dim c As Range, n As Long, LR As Long   Application.ScreenUpdating = False   Worksheets("Sheet2").Activate   For Each c In Worksheets("Sheet1").Range("A2:A5")     n = c.Offset(, 1).Value     Range(c.Value).Resize(n).EntireRow.Insert     Range(c.Value).Resize(n).EntireRow.Interior.Color = c.Offset(, 2).Interior.Color   Next   Application.ScreenUpdating = True End Sub

nkmyr
質問者

補足

ありがとうございます。 以下のコードを併用しましたが、「マクロを実行できません。マクロが使用できないか、またはすべてのマクロが無効になっている可能性があります」とエラーメッセージが出ます。 どこが間違っておりますか? 宜しくお願いします。 Sub 行挿入() Dim ka As Long ka = Worksheets("Sheet1").Range("A4").Value With Worksheets("Sheet2") .Range("A16").Resize(ka).EntireRow.Insert .Range("A16").Resize(ka).EntireRow.Interior.Color = vbBlue .Activate End With Dim m As Long m = Worksheets("Sheet1").Range("A3").Value With Worksheets("Sheet2") .Range("A14").Resize(m).EntireRow.Insert .Range("A14").Resize(m).EntireRow.Interior.Color = vbGreen .Activate End With Dim k As Long k = Worksheets("Sheet1").Range("A2").Value With Worksheets("Sheet2") .Range("A13").Resize(k).EntireRow.Insert .Range("A13").Resize(k).EntireRow.Interior.Color = vbRed .Activate End With Dim q As Long q = Worksheets("Sheet1").Range("A1").Value With Worksheets("Sheet2") .Range("A10").Resize(q).EntireRow.Insert .Range("A10").Resize(q).EntireRow.Interior.Color = vbYellow .Activate End With     Dim c As Range, n As Long, LR As Long     Application.ScreenUpdating = False     Worksheets("Sheet2").Activate     For Each c In Worksheets("Sheet1").Range("A2:A5")         n = c.Offset(, 1).Value         Range(c.Value).Resize(n).EntireRow.Insert         Range(c.Value).Resize(n).EntireRow.Interior.Color = c.Offset(, 2).Interior.Color     Next     Application.ScreenUpdating = True     End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>A10に2行分挿入、A13に10行分挿入、A14に20行分挿入、A16に8行分挿入の 挿入は下から Range("A16").Resize(8).EntireRow.Insert Range("A14").Resize(20).EntireRow.Insert Range("A13").Resize(10).EntireRow.Insert Range("A10").Resize(2).EntireRow.Insert この場合の削除は上から Range("A10").Resize(2).EntireRow.Delete Range("A13").Resize(10).EntireRow.Delete Range("A14").Resize(20).EntireRow.Delete Range("A16").Resize(8).EntireRow.Delete デバッグのステップインを実行して一行一行の動きを観察すると良いですよ

nkmyr
質問者

お礼

値が変わるたびにマクロも修正するとなると、マクロより手動でやったほうが早いですね。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

行の挿入は下から行うのが基本です。 Sub 色塗り()   Dim n As Long   Worksheets("Sheet2").Activate   n = Worksheets("Sheet1").Range("A10").Value   Range("A17").Resize(n).EntireRow.Insert   Range("A17").Resize(n).EntireRow.Interior.Color = vbBlue   n = Worksheets("Sheet1").Range("A5").Value   Range("A15").Resize(n).EntireRow.Insert   Range("A15").Resize(n).EntireRow.Interior.Color = vbGreen   n = Worksheets("Sheet1").Range("A2").Value   Range("A14").Resize(n).EntireRow.Insert   Range("A14").Resize(n).EntireRow.Interior.Color = vbRed   n = Worksheets("Sheet1").Range("A1").Value   Range("A11").Resize(n).EntireRow.Insert   Range("A11").Resize(n).EntireRow.Interior.Color = vbYellow End Sub 行の削除も下から Sub 行削除()   Dim LR As Long   Worksheets("Sheet2").Activate   LR = Cells(Rows.Count, "A").Row   If LR < 27 Then LR = 27   Range("A27:A" & LR).EntireRow.Delete   Range("A23").EntireRow.Delete   Range("A16:A17").EntireRow.Delete   Range("A1:A9").EntireRow.Delete End Sub

nkmyr
質問者

補足

ありがとうございます。 下から挿入を行うのでしたか。盲点でした。 うまくいきました。 行削除の方ですが。 テストとして A10に2行分挿入、A13に10行分挿入、A14に20行分挿入、A16に8行分挿入のマクロを実行しましたが、行削除はうまくいきませんでした。 説明不足ですみません。挿入する数値はバラバラです。 宜しくお願いします。

関連するQ&A