例如:
我得到了这个ID的列表(每个数字对应一个人)然而这些数字例如695678,695683,696217不会上升一个。他们都从低到高排名。有没有办法自动将这些值更改为1,2,3,...等等,方法是将最低值更改为1,将第二个最小值更改为2,依此类推。 (无法弄清楚如何用宏来做)
需要注意的是,ID会重复,因为这些人进行了多次交易。
谢谢!
答案 0 :(得分:3)
如果您需要 VBA 解决方案,则:
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
答案 1 :(得分:0)
请尝试:
=IF(ISBLANK(A1),1,IF(A1=A2,B1,B1+1))
向下复制到适合(在顶行数据中有空白)。
为了澄清,假设数据在ColumnA中但从A2开始(A1和B1为空白),则上面的公式放在B2中并向下复制以适应。
首先测试的是A1是否为空(如果为True,则返回1
起点 - 尽管这可以键入B2,然后在B3中使用更简单的公式,依此类推)。如果A1不是空白,则进一步测试,无论该值是否已更改。如果它没有(True),则使用上面的值,如果它已经改变(False),则使用上面增加1的值。
答案 2 :(得分:0)
另一个公式包含您的数据需要未分类,并且应该比任何宏更快:
=SUMPRODUCT( (FREQUENCY($A$1:$A$9, $A$1:$A$9) > 0) * (A1 >= $A$1:$A$10) )
答案 3 :(得分:0)
@ Gary的学生,你的解决方案接近完美,我调查了这个并添加了一个小的修正,编译它会给出一个运行时错误,你的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是窃听的部分。 我也相应地更改了单元格索引。
亲切的问候,
大卫