|
記録はできたようですね。
ではこの記録された内容について考えてみましょう。
> Range("A1:A30").Select
> Selection.Copy
まず、上記の部分ですが、"A1:A30"をCopyしていますね。
ここの部分は「Sheet1」の"A1:A30"ですよね?
なのでこのように書き換えることができます。
WorkSheets("Sheet1").Range("A1:A30").Copy '・・・(1)
どこのシートの どこの場所を コピーする
という感じです。
ちなみに、この"Sheet1"はある特定のBookのシートですよね?
なのでBookを特定して
WorkBooks("あるBook")WorkSheets("Sheet1").Range("A1:A30").Copy '・・・(2)
と書くこともできます。
マクロ記録では、操作一回ごとに記録されますが、
このようにBookやSheetを特定して書くことができれば、
Select, Activateは必要なくなります。
Select, Activateを使用しないコーディングを心がけましょう。
> Sheets("Sheet2").Select
> Range("A1").Select
> ActiveSheet.Paste
なお、ここで貼り付けを行ってますが、Copyをヘルプで引くと、
Destination〜というのがあると思いますので前の部分と合わせて
WorkSheets("Sheet1").Range("A1:A30").Copy _
Destination:=WorkSheets("Sheet2").Range("A1") '・・・(3)
このように書くことができます。
>Sub 繰り返し処理()
> Dim i As Integer
> For i = 1 To 25 Step 30
>
> Next i
>End Sub
ここで初めて、ループ処理に入れることを考えますが、
(3)で示したものですと、ちょっと面倒になります。
なぜなら、Sheetやセルを指定している引数が文字列だからです。
For 〜 Nextでまわすループカウンタは数値ですよね?
なので、数値が使えるように書き換えてやります。
WorkSheets(1).Cells(1, 1).ReSize(30, 0).Copy _
Destination:=WorkSheets(2).Cells(1, 1) '・・・(4)
この方法ですと、SheetはIndexを使って指定しています。
SheetのIndexは画面のSheetの並び順ですのでこの場合、
左から1番目のSheetのあるデータを左から2番目シートにコピーする
という意味になります。
同様にCells, ReSizeについてもお調べください。
また、次のSheetの場合、このようになりますよね?
WorkSheets(1).Cells(31, 1).ReSize(30, 0).Copy _
Destination:=WorkSheets(3).Cells(1, 1) '・・・(5)
ここで変化している数値を方程式にしてみてください。
たとえばSheetが1つ右にずれるたびに行は何行動きますか?
Sheetの増分を「i」とすると、行の増分「j」はどのようにあらわせますか?
k = ??? i
~~~
↑ここに入るものを考えてください。
|
|