- ベストアンサー
VBAで異なる統合数のセルに指定の数字を入力する方法
- エクセルVBA初心者の方が統合数が異なるセルに順番に数字を入力する作業を自動化したいと考えています。手動で3000まで入力するのは非常に厳しいため、VBAを使用して自動化できないか検討しています。しかし、参考になるサイトが見つからず、知識も乏しいため、ご指導いただける方がいらっしゃいましたら助かります。
- 作業環境はWindows7とExcel2010です。現在行っている作業を画像で添付しました。お力添えいただける方がいらっしゃいましたら、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
速度は保証の限りではありませんが、offsetで送ると、 結合セルを一個ずつ進めてくれます。ご参考まで。 Sub test() Dim myCell As Range Dim i As Long Set myCell = ActiveSheet.Range("B1") i = 1 Do myCell.Value = i Set myCell = myCell.Offset(1, 0) i = i + 1 Loop While i <= 3000 End Sub
その他の回答 (2)
- tsubuyuki
- ベストアンサー率45% (699/1545)
ごく単純に。 Sub sample() Range("A1").select ' 開始するセル番地 For i = 1 To 3000 ' 最小「1」、最大「3000」 ActiveCell = i ActiveCell.Offset(1, 0).Select Next End Sub 数字を入力するならこれだけでもできます。 結合する作業も同時に行うなら、もう少し考える必要があります。
お礼
早々のお返事ありがとうございます。 希望通りの動作を確認いたしました。 正直こんなに素早く動作するとは思っていませんでしたので、感動しております。 ご丁寧にありがとうございます。
マイクロソフロのサンプルVBAを一部修正したものです。ご参考まで。 A列5万行まで可能です。5万行を超える場合は修正下さい。 Sub test() Dim MyRange As Range Dim BeforeAddress As String Dim i As Integer i = 1 For Each MyRange In Range("A1:A50000") '結合セルかどうか判断 If MyRange.MergeCells Then '前のセルと同じ結合セルかどうか判断 If MyRange.MergeArea.Address <> BeforeAddress Then MyRange.MergeArea.Value = i i = i + 1 End If '結合セルのアドレスを取得 BeforeAddress = MyRange.MergeArea.Address Else MyRange.Value = i i = i + 1 End If If i > 3000 Then Exit Sub Next MyRange End Sub
お礼
試しに5万行にナンバリングしたのですが、 驚く程のスピードに感動しました。 処理内容もイメージ通りのものでしたので、 大変感謝しております。 今後は、徐々に勉強し、自分でも書けるように取り組みたいと思います。 ありがとうございました。
お礼
とても素晴らしいです。 速度も申し分なく、イメージ通りの結果を出すことができました。 初心者の私にに対し、とてもわかりやすいシンプルなVBAで、とても感謝しております。 大変ありがとうございました。