首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Excel或其他软件统计连续数字出现的次数?

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

Stack Overflow用户
提问于 2015-11-06 16:09:27
回答 2查看 196关注 0票数 0

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

假设我有一个主要空白点列表:

代码语言:javascript
复制
1
2
2
4
2
4
2
4
6
2
6
4
2
4
6

我想知道数字2后面跟着4的实例数。在上面的例子中,2后面跟着4的实例数是4倍。我还想知道数字4后面跟着6的次数,等等。

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

EN

回答 2

Stack Overflow用户

发布于 2015-11-06 16:20:59

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

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

请注意,对于几乎所有其他数组处理函数,引用这种大小的范围根本不是一个好主意。然而,COUNTIF(S)/SUMIF(S)使用隐式检测来自传递的任何范围的已用范围,因此仅在这些单元格上操作,因此当引用任意大范围时,性能损失很小或没有损失。

问候

票数 2
EN

Stack Overflow用户

发布于 2015-11-06 19:27:03

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

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

代码:

代码语言:javascript
复制
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中生成一个唯一素数列表。在这个新列中,有另一个迭代,但这一次,它计数列C中的每个值在列B中出现的次数,并将值放在列D中。列B被删除,因为它不再有用。结果是:

  • 专栏A: your original data
  • 专栏B: A list of unique
  • Column C: the count

如何在Excel中实现?

如果您从未使用过宏,this official website可以帮助您完成此操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33562144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档