大量股票回报的代码困难

时间:2017-02-10 09:07:49

标签: excel vba excel-vba

Picture of excel sheet

这是一个交易稀少的股票的例子,这意味着在某些日子里,没有交易发生,因此,股票的价格(回报)不会改变(即使股票在现实生活中可能会改变价值) )。因此,我们必须将日期之间的回报分成标记为红色的单元格。示例:参见股票A.从范围(B3:B6)开始,股票的回报率等于20%,但是,我们希望将此回报平均分配到四天。见上图。

在每一栏中,我希望每个红色标记的单元格(等于0%)填充列中不同于零的下一个数字的平均值(每天没有交易的平均值)。

为了使其更加棘手,我想更改您找到的平均数的单元格值,也等于平均数。

图片只是一个例子 - 我们在另一张表中有超过5000只股票。

1 个答案:

答案 0 :(得分:0)

你可以试试这个

Sub main()
    Dim col As Range, zerosRng As Range, area As Range

    With Worksheets("Stocks") '<--| change "Stocks" to your actual worksheet name
        For Each col In Intersect(.UsedRange, .Range("C1", .Cells(1, .Columns.count).End(xlToLeft)).SpecialCells(xlCellTypeConstants, xlTextValues).EntireColumn).Columns
            With col
                .AutoFilter field:=1, Criteria1:="0%"
                If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then
                    Set zerosRng = .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
                    .Parent.AutoFilterMode = False
                    For Each area In zerosRng.Areas
                        area.Resize(area.Rows.count + 1).Value = area.Cells(area.Rows.count + 1, 1).Value / (area.Rows.count + 1)
                    Next
                End If
            End With
        Next
    End With
End Sub