如何使用Excel或其他软件统计连续数字的出现次数



我是一名博士生。我现在正在写关于素数的论文,但我在编程方面遇到了困难。我希望有人能帮我解决这个问题。这是一个场景:

假设我有一个主要缺口的列表:

1
2
2
4
2
4
2
4
6
2
6
4
2
4
6

我想知道数字2后面跟着4的实例的数量。在上述情况下,2后跟4的实例数是4倍。我也想知道数字4后面跟着6等的次数。

在上面的数据中只有15个,但如果你有大量的数据,很难统计。目前我已经有283146个数据,如果我没有程序,我很难做到这一点。

在A列中列出您的列表,并分别在B1和C1中选择第一个和第二个值:

=COUNTIFS(A1:A1048575,B1,A2:A1048576,C1)

请注意,对于几乎所有其他数组处理函数,引用这样大小的范围根本不是一个好主意。然而,COUNTIF(S)/SUMIF(S。

问候

@XOR-LX的答案是完美的,正如@Jeeped所说,它可以最佳地利用偏移范围。然而,你必须手动定义列B:C中的值列表,如果你必须多次重复分析,并且满足条件的唯一素数的范围永远不相同,这可能会有点乏味。如果你想在30秒内实现自动结果。对于100万行,可以尝试以下VBA代码。

唯一的假设是数据在A列。如果不是这样,最好的选择是将包含数据的列复制到新工作表中的A列。使用这种数据结构,您应该不会遇到问题。

代码:

Option Explicit
Sub countPrimes()
Dim LRC As Long, LRPrimes As Long, count As Integer, lRowB As Long, Rng As Range
Application.ScreenUpdating = False

LRC = 0
Range("A1").Activate
While Not ActiveCell = ""
    If ActiveCell.Value = ActiveCell.Offset(1).Value - 2 Then
    LRC = LRC + 1
    Range("B" & LRC).Value = ActiveCell.Value
    End If
    ActiveCell.Offset(1, 0).Activate
Wend
Range("B1", Range("B1").End(xlDown)).Copy Destination:=Range("C1")
Range("C1", Range("C1").End(xlDown)).RemoveDuplicates Columns:=1, Header:=xlNo
Range("C1", Range("C1").End(xlDown)).Sort key1:=Range("C1"), order1:=xlAscending, Header:=xlNo
lRowB = Range("B" & Rows.count).End(xlUp).Row
Set Rng = Range("B1:B" & lRowB)
Range("C1").Activate

While Not ActiveCell = ""
    count = Application.WorksheetFunction.CountIf(Rng, ActiveCell.Value)
    ActiveCell.Offset(0, 1).Value = count
    ActiveCell.Offset(1, 0).Activate
Wend
Range("B1", Range("B1").End(xlDown)).Delete
Application.ScreenUpdating = True
End Sub

它是如何工作的

它遍历列A,并将列(x)中的每个单元格与列(y)下的单元格进行比较。If x = y -2,然后它将x的值复制到列B中的第一个空行。在遍历整列之后,它在列C中生成一个唯一素数列表,按ASC排序。在这个新列中,还有另一个迭代,但这一次,它计算C列中的每个值在B列中出现的次数,并将该值放在D列中。B列被删除,因为它不再有用了。结果:

  • A列:您的原始数据
  • B列:唯一素数列表
  • C列:计数

如何在Excel中实现

如果你从未使用过宏,这个官方网站可以帮助你。

最新更新