- ベストアンサー
VBAで行を挿入する
VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
もう一つの質問もやっと理解できました。 ちょっと変形します。 A列の4行目から連続して入っているデータに1行挿入します。 Sub 四行目から空白になるまで() Dim i As Integer, x As Integer x = Range("A4").End(xlDown).Row For i = x To 5 Step -1 Rows(i).Select Selection.Insert Shift:=xlDown Next i End Sub
その他の回答 (4)
- mousengoke
- ベストアンサー率50% (197/388)
それは4行目に空行を加えると元4行目が5行目に移るからです。 Sub 四行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i + (i - 4), 1).Value = i Rows(i + (i - 4)).Select Selection.Insert Shift:=xlDown Next i End Sub Sub 四行目から空白になるまで() Dim i As Integer i = 4 Do Until Cells(i + (i - 4), 1).Value = "" Cells(i + (i - 4), 1).Value = i Rows(i + (i - 4)).Select Selection.Insert Shift:=xlDown i = i + 1 Loop End Sub としてみてはどうせしょう。 ちなみに一部にセルの値を書き換える部分がありますがこちらもひょっとしたら?と思って書き換えました。意図が違っていたらごめんなさい。 あと、 (i + (i - 4)) は (2 * i - 4) でも問題ないはずです。
お礼
mousengokeさん、早速のご回答ありがとうございます。 Cells(i + (i - 4), 1).Value = i のところでもともとの挿入行の数字にかわってしまいますね。質問が不明確でもうしわけございません。 なるほど、cellsプロパティの設定の方法が参考になりました。なかなか一ひねりしないと思うように動いてくれないところに苦しんでますががんばって勉強します。 今後ともよろしくお願いします。 ありがとうございました。
- shishishishi
- ベストアンサー率39% (362/921)
これでいいですか? Sub 四行目から10行目まで() Dim i As Integer For i = 10 To 5 Step -1 Rows(i).Select Selection.Insert Shift:=xlDown Next i End Sub
- shishishishi
- ベストアンサー率39% (362/921)
Sub 四行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows(i).Select Selection.Insert Shift:=xlDown Next i End Sub でどうですか? またマクロ名の頭に数字は使えません。 二番目は質問の意味不明です。
補足
shishishishiさまありがとうございます。 #1のsoma3さんの補足欄に記入させていただきました通りの結果となります。 #1さんと違ったところは実行が終わった後、A列に「10」がされた1行が挿入されることでした。(今回の場合A11セル+A12~A17、#1さんの場合、A11~A16のA11セルの文字が10に変更されてしまう) 質問2の意味はA列に連続して(文字が)入力されている場合に、入力されているセルが終わるまで(セルが空白になるまで)1行ずつ空白の行を挿入したいとの意です。 どうかよろしくお願いします。
- soma3
- ベストアンサー率39% (16/41)
デバックがかかってしまう Rows("i:i").Select の部分についての説明ですが、 これは""で囲まれてしまっているため、 文字列[i:i]と認識されてしまってるんだと思います。 Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i の部分を Dim i As Integer Dim strRow As String '' 追加 For i = 4 To 10 Cells(i, 1).Value = i strRow = i & ":" & i '' 追加 Rows(strRow).Select '' 変更 'Rows("i:i").Select '' 削除 Selection.Insert Shift:=xlDown Next i 以上でエラーはなくなります。
補足
すいません!!質問の仕方が悪く少し間違ってました。 4行目から10行目の各行に1行ずつ挿入したかったのですが・・・ 行 4 ABC 5 ABC 6 ABC ・・・ を下記のように 4 ABC 5 (空白の行) 6 ABC 7 (空白の行) 8 ABC 9 (空白の行) ・・・ ご指摘いただきました方法ですと 4 (空白の行) 5 (空白の行) 6 (空白の行) 7 ABC 8 ABC 9 ABC ・・・ となってしまいます。 それと、多分最後のNext i のせいだと思うのですが、 挿入されたあと、もともとのA4セルが「10」に変更されて実行されてしまします。(#2さんとの違うところ) また、2個目の質問は上記のような作業をでセルの範囲指定をA列が空白になるまで1行ずつ挿入したいとの意味なのですが、わかってもらえますでしょうか?? よろしくお願いします。
お礼
shishishishiさま、両方とも完璧です。ありがとうございました。 ちょっとまだ私には x = Range("A4").End(xlDown).Row の部分が難しいのですが、勉強して習得します。 ホントにありがとうございました。 今後ともよろしくお願いします。