2016-12-01 5 views
0

私は毎日の株価データで35から40のワークシートを持っており、マクロ内の各ワークシートの株価収益率を計算しようとしています。式はLN(今日/昨日)で、日次株価収益率を示します。以下のコードを実行していますが、5番目のワークシートでループを開始する方法を理解できません。私のポートフォリオは最初の4つのワークシートにあります。誰でもこれがどのように機能するか知っていますか?vbaの5番目のワークシートから最終的なワークシートへのループ?

Sub Macro2() 
Dim wb As Workbook 
Dim i As Integer 
Dim ws As Worksheet 
Set wb = ActiveWorkbook 
Set ws = Worksheets.Count = 5 

For i = 5 To ThisWorkbook.Worksheets.Count 
Activeworksheet.Columns("c").ClearContents 
Range("C4").Select 
ActiveCell.FormulaR1C1 = "=LN(RC[-1]/R[-1]C[-1])" 
Range("C4").Select 
Selection.AutoFill Destination:=Range("C4:C507") 
Range("C4:C507").Select 
Next i 

End Sub 

答えて

1

あなたはavoid using .Selectと思っています。それは私が信じるものです。これは役立つはず:あなたは正しい考えを持っているか

Sub Macro2() 
Dim wb As Workbook 
Dim i As Integer 
Dim ws As Worksheet 
Set wb = ActiveWorkbook 
Set ws = Worksheets.Count = 5 

For i = 5 To ThisWorkbook.Worksheets.Count 
With Worksheets(i) 
.Columns("c").ClearContents 
.Range("C4").FormulaR1C1 = "=LN(RC[-1]/R[-1]C[-1])" 
.Range("C4").AutoFill Destination:=.Range("C4:C507") 
Next i 

End Sub 

注意を、I = 5で始まるForループが良いですが、その後、実際にiを使用することはありません。 ActiveSheetを使用すると、現在のシートがアクティブであれば何でも使用します(明らかに?)。したがって、あなたのコードはそのシート上でのみ実行されていました...そして、それは多くの場合、ワークシートを持っています(それが理にかなっていれば)。

+0

ありがとう、Bruce! –

+0

@NickGarciaはあなたのために働きますか?その場合は、回答としてマークを付けてください(投稿の左にあるチェックマークをクリックしてください) – BruceWayne

0

男の子らしい。 HeresコードはB3:Bの価格に基づいており、C4:Cの返品

Sub Macro2() 
Dim wb As Workbook 
Dim i As Integer 
Dim ws As Long 
Set wb = ActiveWorkbook 
For i = 6 To 56 
ws = Worksheets(i).Activate 
Range("C4").Select 
ActiveCell.FormulaR1C1 = "=LN(RC[-1]/R[-1]C[-1])" 
Range("C4").Select 
Selection.AutoFill Destination:=Range("C4:C507") 
Range("C4:C507").Select 
Range("C2").Select 
ActiveCell.FormulaR1C1 = "Daily Return" 
Range("C:C").Select 
Columns("C:C").EntireColumn.AutoFit 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Style = "Percent" 
Selection.NumberFormat = "0.0%" 
Selection.NumberFormat = "0.00%" 
With Selection 
    .HorizontalAlignment = xlCenter 
    .VerticalAlignment = xlBottom 
    .WrapText = False 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
End With 
Range("B:B").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Style = "Currency" 
Next i 

End Sub 
+0

私のデータは、もともと最終ワークシートにあったワークシート56で停止することに注意してください。 –

関連する問題