首页 文章

无法使用宏中的循环基于列值使公式动态化

提问于
浏览
1

此问题与使用Excel中的宏自动化动态范围公式有关 .

  • 我有2列“A”和“B” .

  • 带有应用程序ID的A列 . “A”列中的应用程序ID在一些迭代后动态变化,即有18个计数,然后是43个,然后是15个,依此类推......

  • 列B具有相应的0和1 .

我正在计算基于计数值的二项分布公式,使用18个B值,然后是43个B值,然后是15个B值,依此类推 .

如果两行中的应用程序ID不匹配,则应计算公式 . 该公式包含2-19行值,而不是20-62行值,而不是63-77行值,依此类推......

我想要它计算109972个细胞 . 寻找可以做到这一点的宏 .

Table Image

第一个公式:

= IF(A19 <> A20,BINOM.DIST(COUNTIF($ B $ 2: B19 ,0),COUNT($ B $ 2: B19 ),COUNTIF($ B $ 2: B19 ,0)/ COUNT($ B $ 2: B19 ),假),””)

第二个公式:

= IF(A62 <> A63,BINOM.DIST(COUNTIF( $B$20B62 ,0),COUNT( $B$20B62 ),COUNTIF( $B$20B62 ,0)/ COUNT( $B$20B62 ),FALSE),“”)

第三个公式(等等必须计算)

= IF(A77 <> A78,BINOM.DIST(COUNTIF( $B$63 :B77,0),COUNT( $B$63 :B77),COUNTIF( $B$63 :B77,0)/ COUNT( $B$63 :B77),FALSE),“”)

1 回答

  • 0

    如果您的数据位于名为Data的工作表中,请添加一个命令按钮,然后按照代码进行操作 . 您应该检查二项式参数,因为我不习惯它们 .

    Private Sub CommandButton1_Click()
        Dim lTrialNumber As Long
        Dim lFailNumber As Long
        Dim lLastRow As Long
        Dim i As Long
    
        lLastRow = Worksheets("Data").Cells(1, 1).End(xlDown).Row
        lTrialNumber = 0
        lFailNumber = 0
    
        For i = 2 To lLastRow 'if data start in row 2. Row 1 for Titles
            If Worksheets("Data").Cells(i + 1, 1) <> Worksheets("Data").Cells(i, 1) Then
                lTrialNumber = lTrialNumber + 1
                If Worksheets("Data").Cells(i, 2) = 0 Then
                    lFailNumber = lFailNumber + 1
                End If
                Worksheets("Data").Cells(i, 4) = WorksheetFunction.BinomDist(lFailNumber, lTrialNumber, lFailNumber / lTrialNumber, False)
                lTrialNumber = 0
                lFailNumber = 0
            Else
                lTrialNumber = lTrialNumber + 1
                If Worksheets("Data").Cells(i, 2) = 0 Then
                    lFailNumber = lFailNumber + 1
                End If
            End If
        Next
    End Sub
    

相关问题