- 締切済み
エクセル 最終行からの連続コピー
* すぐに回答を! エクセルC20からI51までデータを1日1行ずつ入力します。 データが入力されている最終行から上に連続する10行(最終行含む)をコピーしたいのですが、最終行から10行上をどのように認識させたらいいのか、わかりません。Offsetなど試してみましたがダメでした。 よろしくお願いします。 Sub dataコピー() Dim i As Long Dim j As Integer Dim rng As Range '最後尾から10行前までを選択 With Worksheets("月").Range(Cells(20, 3), Cells(51, 10)) For i = Cells(Rows.Count, 1).End(xlUp).Row To -10? If rng Is Nothing Then Set rng = .Rows(i) End If j = j + 1 If j >= 10 Then Exit For Next i 'コピー If Not rng Is Nothing Then rng.Copy Range("M1") Beep Else MsgBox "該当行は存在しません。", 48 End If End With Set rng = Nothing End Sub コードはこちらを参考にしました http://questionbox.jp.msn.com/qa5440189.html
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
Sub Test1() MsgBox Cells(Rows.Count, 1).End(xlUp).Row End Sub で試してみてください。最終の行が番号が表示されますよね。 ただコードですが With Worksheets("月").Range(Cells(20, 3), Cells(51, 10)) For i = Cells(Rows.Count, 1).End(xlUp).Row To 20 Step -1 としておけば、最終行から20行目まで繰り返されますが j = j + 1 If j >= 10 Then Exit For とありますので、10回繰り替えられたら、そこで終わりになるはずです。 For i = Cells(Rows.Count, 1).End(xlUp).Row To Cells(Rows.Count, 1).End(xlUp).Row -10 Step -1 とすれば j = j + 1 If j >= 10 Then Exit For は不要になります。 但し最終行が28とか30より少ない場合にどの様に処理したいのかで 使い方が変わってきます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
最終行の10行前から最終行までなら、例えば次のようにすればよいでしょう。 For i = Cells(Rows.Count, 1).End(xlUp).Row - 10 To Cells(Rows.Count, 1).End(xlUp).Row
お礼
この方法では、うまくいきませんでしたが勉強になりました。 有難うございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
>最終行から10行上をどのように認識させたらいいのか Sub Test() Rows(Range("A65536").End(xlUp).Row & ":" & Range("A65536").End(xlUp).Row - 10).Copy End Sub を試してみてください。
補足
hallo-2007さん、有難うございます。 最終行から10行上を認識させたいのに出来ないのは For i = Cells(Rows.Count, 1).End(xlUp).Row のところなんです。 最終行の10行前 To 最終行 というのは出来ないのでしょうか。 説明が下手ですみません。
お礼
お返事が遅くなり申し訳ありません。 思いついた方法を、色々と試していますが、どこが悪いのかさっぱりわかりません。 こちらの方法も試してみましたが、コピーできません(コピー先のセルは空白のままです)。 コードの勉強にはなりました。 有難うございました。
補足
sortで降順にして、こちらのコードでFor 1 To 20 step 1で問題は解決しました! 失礼致しました。 どうも有難うございました!