3月 282008
今まで作ってきたプログラムで、Excelの複数のシートをまたがって処理をしなければならない場合、
例えば、

Sheet1のA列の値をSheet2にコピーする、みたいな処理を作る。。。しょっちゅうやってますが(^^;)
今まで、こんなコードで書いてきました。
Sub test()
Dim lastgyou As Integer
Dim i As Integer
Dim atai As String
'Sheet1を選択します
Sheets("Sheet1").Select
'最後の行を求めます
ActiveSheet.Range("A1").End(xlDown).Select
lastgyou = ActiveCell.Row
'1行目から最後の行まで、Sheet2にコピーします。
For i = 1 To lastgyou
' Sheet1 の i 行目の値を atai という変数に入れます。
Sheets("Sheet1").Select
atai = ActiveSheet.Cells(i, 1).Value
' Sheet2 の i 行目の値に atai を代入します。
Sheets("Sheet2").Select
ActiveSheet.Cells(i, 1).Value = atai
Next
End Sub
もちろん、これで動くので良いですが、いちいち
Sheets(“Sheet1″).Select
Sheets(“Sheet2″).Select
で切り替えなくても、出来る方法がありました。
Sub test()
Dim lastgyou As Integer
Dim i As Integer
Dim atai As String
'最後の行を求めます
lastgyou = Sheets("Sheet1").Range("A1").End(xlDown).Row
'1行目から最後の行まで、Sheet2にコピーします。
For i = 1 To lastgyou
' Sheet1 の i 行目の値を atai という変数に入れます。
atai = Sheets("Sheet1").Cells(i, 1).Value
' Sheet2 の i 行目の値に atai を代入します。
Sheets("Sheet2").Cells(i, 1).Value = atai
Next
End Sub
今までは、Selectを使い、シートを選択して、「今現在アクティブのシート」という指定方法をしていましたが、直接シート名を指定して、セルの値を操作したり出来ます。
こちらのほうが、わかりやすいですね(^^)
こうなると、今まではSheetを切り替えるために、ataiという変数に一時的にSheet1の値を保存していましたが、それすらも必要ではなくなります。
Sub test()
Dim lastgyou As Integer
Dim i As Integer
'最後の行を求めます
lastgyou = Sheets("Sheet1").Range("A1").End(xlDown).Row
'1行目から最後の行まで、Sheet2にコピーします。
For i = 1 To lastgyou
' Sheet1 の i 行目の値をSheet2 の i 行目に代入します。
Sheets("Sheet2").Cells(i, 1).Value = Sheets("Sheet1").Cells(i, 1).Value
Next
End Sub
えらいすっきりしました(^^;)
今後は、この形式でプログラムを作ってみたいと思います。