用于更改ID值的Excelmacros

例如:

  • 695678需要是1
  • 695678需要是1
  • 695678需要是1
  • 695678需要是1
  • 695683需要2
  • 695683需要2
  • 695683需要2
  • 696217需要是3
  • 696217需要是3

我得到了这个ID列表(每个数字对应一个人)然而,这些数字,例如695678,695683,696217不增加一个。 他们都排名从低到高。 有没有办法自动将这些值更改为1,2,3,…等等,通过将最低值更改为1,第二最低值更改为2,依此类推。 (无法弄清楚如何与macros的做)

有一点需要注意的是,由于这些人做了一笔以上的交易,所以这些ID是重复的

谢谢!

@加里的学生,你的解决scheme接近完美,我已经看了这个,并添加了一个小的更正,编译它给出了一个运行时错误,你的K值是1,在你的else子句中,它只是再次取相同的值。

调整到他们的Excel文件后,它工作完美:

 Sub Renumber() Dim N As Long, I As Long, OldValue As Long Dim K As Long K = 1 N = Cells(Rows.Count, 2).End(xlUp).Row OldValue = Cells(2, 2).Value For I = 2 To N If Cells(I, 2).Value = OldValue Then Cells(I, 2).Value = K Else OldValue = Cells(**I + 1**, 2).Value K = K + 1 Cells(I, 2) = K End If Next I End Sub 

**之间的I + 1是被窃听的部分。 我也相应地改变了小区索引。

亲切的问候,

大卫

如果您需要VBA解决scheme,那么:

 Sub Renumber() Dim N As Long, I As Long, OldValue As Long Dim K As Long K = 1 N = Cells(Rows.Count, "A").End(xlUp).Row OldValue = Cells(1, 1).Value For I = 1 To N If Cells(I, 1).Value = OldValue Then Cells(I, 1).Value = K Else OldValue = Cells(I, 1).Value K = K + 1 Cells(I, 1) = K End If Next I End Sub 

请尝试:

 =IF(ISBLANK(A1),1,IF(A1=A2,B1,B1+1)) 

复制下来以适应(在第一行的数据空白)。

为了澄清,假定数据在ColumnA中,但是从A2开始(A1和B1为空),上面的公式被放置在B2中,并被拷贝下来以适应。

首先testingA1是否为空白(如果为True,则返回1的起始点 – 虽然这可以被键入到B2中,然后在B3中使用更简单的公式)等等。 如果A1不是空白的,那么还有一个testing,不pipe这个值是否已经改变。 如果它没有(True),那么使用上面的值,如果它改变了(False),使用上面刚刚增加的值。

另外一个公式将您的数据需要sorting,并且应该比任何macros更快:

 =SUMPRODUCT( (FREQUENCY($A$1:$A$9, $A$1:$A$9) > 0) * (A1 >= $A$1:$A$10) )