Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于更改ID值的Excel宏';s_Excel_Vba - Fatal编程技术网

用于更改ID值的Excel宏';s

用于更改ID值的Excel宏';s,excel,vba,Excel,Vba,例如: 695678必须是1 695678必须是1 695678必须是1 695678必须是1 695683必须是2 695683必须是2 695683必须是2 696217必须是3 696217必须是3 我得到了这个ID列表(每个数字对应一个人),但是这些数字例如695678、695683、696217不会增加1。他们的排名从低到高。有没有办法将这些值自动更改为1,2,3,。。。依此类推,将最低值更改为1,将第二个最低值更改为2,依此类推。(不知道如何使用宏执行此操作) 需要注意的是,当这

例如:

  • 695678必须是1
  • 695678必须是1
  • 695678必须是1
  • 695678必须是1
  • 695683必须是2
  • 695683必须是2
  • 695683必须是2
  • 696217必须是3
  • 696217必须是3
我得到了这个ID列表(每个数字对应一个人),但是这些数字例如695678、695683、696217不会增加1。他们的排名从低到高。有没有办法将这些值自动更改为1,2,3,。。。依此类推,将最低值更改为1,将第二个最低值更改为2,依此类推。(不知道如何使用宏执行此操作)

需要注意的是,当这些人进行一次以上的交易时,ID会重复

谢谢

请尝试:

=IF(ISBLANK(A1),1,IF(A1=A2,B1,B1+1))  
向下复制以适应(数据的第一行为空白)

为了澄清,假设数据在A列,但从A2开始(A1和B1为空),上面的公式放在B2中,并向下复制以适应

首先,测试A1是否为空(如果为真,则返回
1
起点-尽管这可以输入B2和一个更简单的公式,然后在B3中使用,以此类推)。如果A1不为空,则进行进一步测试,无论值是否已更改。如果没有(True),则使用紧接着上面的值,如果它已更改(False),则使用紧接着上面的值加1

请尝试:

=IF(ISBLANK(A1),1,IF(A1=A2,B1,B1+1))  
向下复制以适应(数据的第一行为空白)

为了澄清,假设数据在A列,但从A2开始(A1和B1为空),上面的公式放在B2中,并向下复制以适应

首先,测试A1是否为空(如果为真,则返回
1
起点-尽管这可以输入B2和一个更简单的公式,然后在B3中使用,以此类推)。如果A1不为空,则进行进一步测试,无论值是否已更改。如果没有(True),则使用紧接着上面的值,如果它已更改(False),则使用紧接着上面的值加1

请尝试:

=IF(ISBLANK(A1),1,IF(A1=A2,B1,B1+1))  
向下复制以适应(数据的第一行为空白)

为了澄清,假设数据在A列,但从A2开始(A1和B1为空),上面的公式放在B2中,并向下复制以适应

首先,测试A1是否为空(如果为真,则返回
1
起点-尽管这可以输入B2和一个更简单的公式,然后在B3中使用,以此类推)。如果A1不为空,则进行进一步测试,无论值是否已更改。如果没有(True),则使用紧接着上面的值,如果它已更改(False),则使用紧接着上面的值加1

请尝试:

=IF(ISBLANK(A1),1,IF(A1=A2,B1,B1+1))  
向下复制以适应(数据的第一行为空白)

为了澄清,假设数据在A列,但从A2开始(A1和B1为空),上面的公式放在B2中,并向下复制以适应


首先,测试A1是否为空(如果为真,则返回
1
起点-尽管这可以输入B2和一个更简单的公式,然后在B3中使用,以此类推)。如果A1不为空,则进行进一步测试,无论值是否已更改。如果没有(True),则使用紧接着上面的值,如果它已更改(False),则使用紧接着上面的值加1

如果您需要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

如果您需要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

如果您需要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

如果您需要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

另一个公式是,如果您的数据需要取消排序,则应比任何宏更快:

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

另一个公式是,如果您的数据需要取消排序,则应比任何宏更快:

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

另一个公式是,如果您的数据需要取消排序,则应比任何宏更快:

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

另一个公式是,如果您的数据需要取消排序,则应比任何宏更快:

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

@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是被窃听的部分。 我也相应地更改了单元格索引

亲切问候,


David

@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是被窃听的部分。 我也相应地更改了单元格索引

亲切问候,


David

@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是被窃听的部分。 我也相应地更改了单元格索引

亲切问候,


David

@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是被窃听的部分。 我也相应地更改了单元格索引

亲切问候,


David

1)此ID是否始终已排序?2) 您想要一个公式还是应该是VBA?是的,它们都已排序!他们总是在一起。然而,一个人可能有3排