2017-10-10 59 views
0

此代码是为金融市场交易创建定位工具。如何创建一个以5,10,15步骤扫描一组参数的移动平均VBA?

我将不胜感激帮助。

Sub Mov_Avgs() 

'last row 
Dim Lastrow As Long 
Lastrow = Range("C" & Rows.Count).End(xlUp).Row 

'last colummn 
Dim LastCol As Integer 
LastCol = Cells(5, Columns.Count).End(xlToLeft).Column 

Application.Run "ATPVBAEN.XLAM!Moveavg", ActiveSheet.Range("$C$6:$C" & Lastrow), _ 
     ActiveSheet.Range("**E6**"), **5**, False, False, False   

End Sub 

回答

0

请尝试以下操作。我将输出放置在与输入数据偏移的位置,您可以根据需要进行修改。也假定在Sheet(1)中有数据并且具有完全合格的参考文献:

Option Explicit 
Sub Mov_Avgs() 

    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim Lastrow As Long 
    Dim LastCol As Integer 
    Dim step As Long 
    Dim outputRange As Range 
    Dim stepArr() 
    Dim i As Long 

    Dim inputRange As Range 
    stepArr = Array(5, 10, 15) 

    Set wb = ThisWorkbook 
    Set ws = wb.Sheets(1) 

    Lastrow = ws.Range("C" & Rows.Count).End(xlUp).Row 
    LastCol = ws.Cells(5, Columns.Count).End(xlToLeft).Column 

    Set inputRange = ws.Range("$C$6:$C" & Lastrow) 

    For i = LBound(stepArr) To UBound(stepArr) 

     Set outputRange = inputRange.Offset(0, LastCol + i) 

     Application.Run "ATPVBAEN.XLAM!Moveavg", inputRange, _ 
         outputRange, stepArr(i), False, False, False 

    Next i 

End Sub 
+0

啊凉爽的男人。嗯......似乎告诉我输入范围包含非数字数据 - 很奇怪...... – Neb967

+0

如果在输出中引用NA();这些时间段被排除在计算之外,因为没有足够的数据点来执行计算,例如,如果5点平均值,则前4行输出将为NA()。 – QHarr

+0

不,我得到一个弹出消息,说明 - 输出中的N/A是我已经熟悉的东西。 – Neb967