電子書籍の厳選無料作品が豊富!

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

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

shishishishiさま、両方とも完璧です。ありがとうございました。

ちょっとまだ私には
x = Range("A4").End(xlDown).Row
の部分が難しいのですが、勉強して習得します。

ホントにありがとうございました。
今後ともよろしくお願いします。

お礼日時:2004/04/07 11:49

それは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) でも問題ないはずです。
    • good
    • 0
この回答へのお礼

mousengokeさん、早速のご回答ありがとうございます。
Cells(i + (i - 4), 1).Value = i
のところでもともとの挿入行の数字にかわってしまいますね。質問が不明確でもうしわけございません。

なるほど、cellsプロパティの設定の方法が参考になりました。なかなか一ひねりしないと思うように動いてくれないところに苦しんでますががんばって勉強します。

今後ともよろしくお願いします。
ありがとうございました。

お礼日時:2004/04/07 12:01

これでいいですか?



Sub 四行目から10行目まで()
Dim i As Integer
For i = 10 To 5 Step -1
Rows(i).Select
Selection.Insert Shift:=xlDown
Next i
End Sub
    • good
    • 0

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行ずつ空白の行を挿入したいとの意です。

どうかよろしくお願いします。

補足日時:2004/04/07 10:04
    • good
    • 0

デバックがかかってしまう



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行ずつ挿入したいとの意味なのですが、わかってもらえますでしょうか??

よろしくお願いします。
 

補足日時:2004/04/07 09:41
    • good
    • 0

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