- ベストアンサー
エクセルで連番の処理を自動化する方法
- エクセルでの連番を自動化する方法をご紹介します。例えば、D1に3、E1に25を入力し、マクロを実行するとD列の2行目以下に3,4,5,6...25と連番で入力できるようになります。また、A~E列の1行目のデータを変更すると、それに応じて連番も自動的に更新されます。
- 連番の処理を行う際には、D1とE1に入力する数値は整数である必要があります。また、E1の数値はD1よりも大きい必要があります。ただし、D1とE1に同じ数字が入力された場合は、その数字の1行分のみが連番として入力されます。
- この連番処理は、2行目以下のD列で空白の行以下に自動的に連番を入力していくというものです。同時に、A~E列の2行目以下にはそれぞれ1行目のデータと同じ内容が入力されます。連番の処理とデータの入力を繰り返すことで、簡単に連番を作成することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。Wendy02です。 >今のままではE1が変わるたびに動くようですので。 単に入れ替えればよいだけです。 なお、コントロールツールのボタンにしてくださいね。フォームですと、ちょっと書き方が変わります。 それと、前回の分(2440028)は、まだオープンのままですから、問題がないようでしたら、、締めてくださいね。 'シートモジュール '--------------------------------------------------------- Private Sub CommandButton1_Click() Dim i As Long Dim j As Long Dim rw As Long rw = Range("D65536").End(xlUp).Row If IsNumeric(Range("D1").Value) And IsNumeric(Range("E1").Value) Then i = Range("D1").Value: j = Range("E1").Value If j >= i Then If rw + (j - i) + 1 > 65536 Then MsgBox "行のオーバーになります。", vbCritical: Exit Sub Cells(rw + 1, 4).Resize(j - i + 1).FormulaLocal = "=" & CStr(i) & "+Row(A1)-1" Cells(rw + 1, 4).Resize(j - i + 1).Value = Cells(rw + 1, 4).Resize(j - i + 1).Value Range("A1:C1").Offset(rw).Resize(j - i + 1, 3).Value = Range("A1:C1").Value End If End If End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 以下のようにはなりますが、私自身としては、実用化させるには、もう一工夫が必要な気がします。例えば、ツールバー式に、窓を作るとか、ダイアログボックスを作ってあげるとか。 'シートモジュールに貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long Dim j As Long Dim rw As Long If Target.Count > 1 Then Exit Sub If Target.Address <> "$E$1" Then Exit Sub 'E1 をターゲットキーとする rw = Range("D65536").End(xlUp).Row If IsNumeric(Range("D1").Value) And IsNumeric(Range("E1").Value) Then i = Range("D1").Value: j = Range("E1").Value If j >= i Then If rw + (j - i) + 1 > 65536 Then MsgBox "行のオーバーになります。", vbCritical: Exit Sub Application.EnableEvents = False Cells(rw + 1, 4).Resize(j - i + 1).FormulaLocal = "=" & CStr(i) & "+Row(A1)-1" Cells(rw + 1, 4).Resize(j - i + 1).Value = Cells(rw + 1, 4).Resize(j - i + 1).Value Range("A1:C1").Offset(rw).Resize(j - i + 1, 3).Value = Range("A1:C1").Value Application.EnableEvents = True End If End If End Sub
補足
ご回答ありがとうございます。 こちらの期待通りの動きをしてくれました。 ただご指摘のとおり実用的にするにはボタンをクリックするたびに動作させるようにしたいです。今のままではE1が変わるたびに動くようですので。アドバイスお願いします。
お礼
前回ともどもお世話になりました。 今まで手動でしていた作業時間とくらべてはるかに効率的になりました。ありがとうございました。