- ベストアンサー
VBAの連番の振り方について
- VBAを使用してセルに連番を振りたい場合、一部のプログラムは正しく動作しないことがあります。
- 具体的には、セルのコピペがうまく行われる一方で、連番が振られないため、最初の行が空になってしまいます。
- この問題を解決するためには、一部の修正が必要です。詳細な修正方法については、以下のプログラムを参考にしてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
もともとC1に何かデータが入ってなければ1行目は空白ですから Do While ActiveCell.Offset(0, 1).Value <> "" 右横のセルをチェックしてますから、Loopは実行されません。 下(2行目)のセルが空白かどうかをチェックして 以下のようにするか (ActiveCell.Offset(1).MergeArea.Selectは下方向に進むので変更しました) Do While ActiveCell.Offset(1, 0).Value <> "" ActiveCell.Value = ren ren = ren + 1 ActiveCell.Offset(0, 1).MergeArea.Select Loop ActiveCellはやめたほうがいいのではと思いますから Do While Range("C1").Offset(1, ren - 1).Value <> "" Range("C1").Offset(0, ren - 1).Value = ren ren = ren + 1 Loop のようにするか 最後のren = 1以降はなくして(Do Whileはやめて) 最初のループを利用する以下に変更したらいかがでしょう。 Range("C1:C10").Copy Range("C1").Value = 1 For cp = 1 To ia - 1 Cells(1, cp + 3).PasteSpecial Cells(1, cp + 3).Value = cp + 1 Next
その他の回答 (1)
- kkkkkm
- ベストアンサー率66% (1742/2617)
No.1の追加です。 連番だけ別にしたいのでしたら Do Whileじゃなくて、Do Whileのところを 以下のようにしてはいかがでしょう。Do~Loopは極力使いたくない。 For i = 1 To ia Range("C1").Offset(0, i - 1).Value = i Next 代入部分は Cells(1, i + 2).Value = i でもいけますが、C1からを意識してRange("C1").Offsetにしています。
お礼
kkkkkmさん、ありがとうございました。 思っていた動きが出来るようになりました。 こんなにすっきりとした式で可能になるとは驚いた半面、 まだまだ勉強が必要だと再認識しました。 とてもいい勉強になりました。本当にありがとうございました。