Vba Excel生成规范化数据

Vba Excel生成规范化数据,vba,excel,random,Vba,Excel,Random,我希望生成的数据中,给定两个平均值(平均点击)和(随时间平均点击)将正确输出间隔数据 很难解释,但最好举个例子 鉴于以下数据: Days: 10 Average Click Value: 3.5 Average Clicks over days: 0.7 然后,您可以生成以下数据: Day 1 Day 2 Day 3 4 Day 4 Day 5 Day 6 Day 7 Day 8 Day 9 3 Day 10 其中第9(3)天和第3(4)

我希望生成的数据中,给定两个平均值(平均点击)和(随时间平均点击)将正确输出间隔数据

很难解释,但最好举个例子

鉴于以下数据:

Days: 10
Average Click Value: 3.5
Average Clicks over days: 0.7
然后,您可以生成以下数据:

Day 1   
Day 2   
Day 3   4
Day 4   
Day 5   
Day 6   
Day 7   
Day 8   
Day 9   3
Day 10  
其中第9(3)天和第3(4)天之间的平均值为3.5,总平均值(10天内的7个)为0.7


以下内容不起作用,因为它的点击值平均值为3.5,但总体平均值为1.4:

Day 1   4
Day 2   
Day 3   3
Day 4   
Day 5   
Day 6   4
Day 7   
Day 8   
Day 9   3
Day 10  
以下内容不起作用,因为它的总体平均值为0.7,但单击值为1.75:

Day 1   1
Day 2   
Day 3   2
Day 4   
Day 5   3
Day 6   
Day 7   
Day 8   
Day 9   1
Day 10  
单击值必须是一个整数,因此以下操作无效:

Day 1   
Day 2   
Day 3   3.5
Day 4   
Day 5   
Day 6   
Day 7   
Day 8   
Day 9   3.5
Day 10  
每一个之间的间距应该是随机的,但遵循严格的偏差。模式应该类似于用户访问他们喜欢的网站的频率

我理解它有时是不精确的,因为有些组合不能用数学方法完成,但它应该尽可能地接近


使用excel是否可以使用这种类型的模式(可以使用VBA)。

这里有一个初学者数组函数:垂直输入:选择行数=天数,输入函数并按Ctrl-Shift-enter键。 随机程度由变异常数控制

Function ClickSpacer(nDays As Long, ClickAvg As Double, ClicksPerDay As Double)

    Dim Spacing As Long
    Dim Clicks() As Long        ''' output
    Dim Total_Clicks As Double
    Dim nDaysClicked As Double
    Dim j As Long
    Dim ClicksSoFar As Long
    Dim RandSpacing As Long
    Dim RandClicks As Long
    Dim ClickOffset As Long
    ReDim Clicks(1 To nDays, 1 To 1)
    Const Variation As Double = 0.2

    Total_Clicks = Round(nDays * ClicksPerDay, 0)
    nDaysClicked = Round(Total_Clicks / ClickAvg, 0)

    Spacing = nDays / (nDaysClicked + 1)
    RandSpacing = Round(Spacing * Variation, 0) * 2
    ClickOffset = Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
    RandClicks = ClickAvg * Variation * 2

    For j = 1 To nDaysClicked
        If j > 1 Then ClickOffset = ClickOffset + Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
        If j = nDaysClicked Then
            Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1), 0)
        Else
            Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1) + (RandClicks * Rnd() - RandClicks * Rnd()), 0)
        End If
        ClicksSoFar = ClicksSoFar + Clicks(ClickOffset, 1)
    Next j

    ClickSpacer = Clicks
End Function

这是一个初学者数组函数:垂直输入:选择行数=天数,输入函数并按Ctrl-Shift-enter键。 随机程度由变异常数控制

Function ClickSpacer(nDays As Long, ClickAvg As Double, ClicksPerDay As Double)

    Dim Spacing As Long
    Dim Clicks() As Long        ''' output
    Dim Total_Clicks As Double
    Dim nDaysClicked As Double
    Dim j As Long
    Dim ClicksSoFar As Long
    Dim RandSpacing As Long
    Dim RandClicks As Long
    Dim ClickOffset As Long
    ReDim Clicks(1 To nDays, 1 To 1)
    Const Variation As Double = 0.2

    Total_Clicks = Round(nDays * ClicksPerDay, 0)
    nDaysClicked = Round(Total_Clicks / ClickAvg, 0)

    Spacing = nDays / (nDaysClicked + 1)
    RandSpacing = Round(Spacing * Variation, 0) * 2
    ClickOffset = Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
    RandClicks = ClickAvg * Variation * 2

    For j = 1 To nDaysClicked
        If j > 1 Then ClickOffset = ClickOffset + Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
        If j = nDaysClicked Then
            Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1), 0)
        Else
            Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1) + (RandClicks * Rnd() - RandClicks * Rnd()), 0)
        End If
        ClicksSoFar = ClicksSoFar + Clicks(ClickOffset, 1)
    Next j

    ClickSpacer = Clicks
End Function

我认为使用解算器可以很容易地实现这一点。制作一个你想要的模型,将你的目标(2个平均值)定义为公式,然后给出要求解的数据范围。不过,你每次都可能得到同样的答案。试试看。

请注意,解算器是可选安装,如果您进行了标准安装而不是完整安装,则可能看不到它。

我认为使用解算器可以很容易地实现这一点。制作一个你想要的模型,将你的目标(2个平均值)定义为公式,然后给出要求解的数据范围。不过,你每次都可能得到同样的答案。试试看。
请注意,解算器是一个可选安装,如果您进行的是标准安装而不是完整安装,则可能不可见