マクロで、最終行について教えてください。 Dim ws1 As Worksheet ws1.Cells(ws1.【←☆ここ☆】Rows.Count, 1).End(xlUp).Row
マクロで、最終行について教えてください。 Dim ws1 As Worksheet ws1.Cells(ws1.【←☆ここ☆】Rows.Count, 1).End(xlUp).Row これを ws1.Cells(Rows.Count, 1).End(xlUp).Row こう書くと、 アクティブシートのことになりますか? それとも、ws1のことになりますか?
Visual Basic | Excel・80閲覧
ベストアンサー
<結論> そのコードが書いてある場所によります。 分かり易く Cells(1, "A") で説明します。 Sheet1モジュールにCells(1, "A")と書くと、 Worksheets("Sheet1").Cells(1, "A")と同じ意味になります。 標準モジュールにCells(1, "A")と書くと、 Activesheet.Celsl(1, "A")と同じ意味になります。 しかし、同一ブックにおいてはどのシートも行の最大値は同じなので、 どのシートモジュールでもどの標準モジュールでも、 Rows.Countと書いて得られる結果は全ておなじです。 但し、Excel2007以降のブックにマクロを書いて、そこからExcel2003以前の形式のブックを扱う場合は注意が必要です。 <補足 Sheet1モジュールにコードが書いてある場合> Cells(1, "A") = "hoge" MsgBox ActiveSheet.Name Sheet2を選択した状態で実行すると、 メッセージボックスには”Sheet2"と表示されますが、 Sheet1のA1にhogeが入力されます。 つまり、シートモジュールにおいて、シートオブジェクトを省略して書くと、コードが書かれたシートを参照するということです。 <補足2 標準モジュールにコードが書いてある場合> Cells(1, "A") = "hoge" MsgBox ActiveSheet.Name Sheet2を選択した状態で実行すると、 メッセージボックスには”Sheet2"と表示され、 Sheet2のA1にhogeが入力されます。 つまり、標準モジュールにおいて、シートオブジェクトを省略して書くと、アクティブシートを参照するということです。 <補足3> シートオブジェクトを省略してRows.Countと書いて問題になるのはこんなとき。 シートの行数の最大は、Excel 2003以前で65536、 Excel 2007以降でブックであれば、1048576です。 従って、もし、 ws1にそのマクロが書いてあって、 ws1 がExcel2007の形式のブックに属し、 ws2 がExcel2003の形式のブックに属していたとすると、 この書き方は当然、エラーになります。 1.ws2.Cells(ws1.Rows.Count, 1) ... また、ws1のシートモジュールでこう書くと、エラーになります。 2.ws2.Cells(Rows.Count, 1) ... これと同じ意味。 ws2.Cells(ws1.Rows.Count, 1) ... また、標準モジュールでこう書いても、 ws1がアクティブな状態ならエラーになります。 3.ws2.Cells(Rows.Count, 1) ... これと同じ意味。 ws2.Cells(ws1.Rows.Count, 1) ... 標準モジュールでこう書けば、エラーになりません。 4. ws2.Activate ws2.Cells(Rows.Count, 1) ... これと同じ意味。 ws2.Cells(ws2.Rows.Count, 1) ...
質問者からのお礼コメント
ありがとうございました!
お礼日時:7/2 15:19