在excel VBA中,如何根据另一列中更改的值逐列增加数字

在excel VBA中,如何根据另一列中更改的值逐列增加数字,excel,vba,Excel,Vba,我在excel中有两列。一个是公司名称。另一列是发票编号,该编号仅应在公司名称更改时增加。应输入起始发票编号 输入起始发票编号=>1001。每次新公司出现时,增加发票编号的VBA代码是什么 Company A 1001 Company A 1001 Company A 1001 Company B 1002 Company B 1002 Company C 1003 可以通过公式或VBA代码求解 逻辑是查看您当前的公司名称单元格是否与

我在excel中有两列。一个是公司名称。另一列是发票编号,该编号仅应在公司名称更改时增加。应输入起始发票编号 输入起始发票编号=>1001。每次新公司出现时,增加发票编号的VBA代码是什么

Company A      1001
Company A      1001
Company A      1001
Company B      1002
Company B      1002
Company C      1003

可以通过公式或VBA代码求解

逻辑是查看您当前的公司名称单元格是否与上一个单元格相同。如果它们相同,则复制上一个值。否则,将发票号增加为1

公式,从单元格C2开始:

=IF(A1=A2,C1,C1+1)

VBA代码

您可能需要更改列号,使其适合您的数据集

Sub IncreaseNumber()

Dim ws As Worksheet
Dim lrow As Long
Dim i As Long

Set ws = Worksheets("Sheet1") 'Name the worksheet

lrow = ws.Cells(Rows.Count, "A").End(xlUp).Row 'find the lastrow in column A

For i = 2 To lrow 'Loop from second row to the last row
   If ws.Cells(i - 1, "A").Value = ws.Cells(i, "A").Value Then 'If cell "i -1" and cell "i" is equal then
        ws.Cells(i, "B").Value = ws.Cells(i - 1, "B").Value 'take the same value as row above
    Else
        ws.Cells(i, "B").Value = ws.Cells(i - 1, "B").Value + 1 'if not the same, then add 1 to the invoice number
    End If
Next i

End Sub

可以通过公式或VBA代码求解

逻辑是查看您当前的公司名称单元格是否与上一个单元格相同。如果它们相同,则复制上一个值。否则,将发票号增加为1

公式,从单元格C2开始:

=IF(A1=A2,C1,C1+1)

VBA代码

您可能需要更改列号,使其适合您的数据集

Sub IncreaseNumber()

Dim ws As Worksheet
Dim lrow As Long
Dim i As Long

Set ws = Worksheets("Sheet1") 'Name the worksheet

lrow = ws.Cells(Rows.Count, "A").End(xlUp).Row 'find the lastrow in column A

For i = 2 To lrow 'Loop from second row to the last row
   If ws.Cells(i - 1, "A").Value = ws.Cells(i, "A").Value Then 'If cell "i -1" and cell "i" is equal then
        ws.Cells(i, "B").Value = ws.Cells(i - 1, "B").Value 'take the same value as row above
    Else
        ws.Cells(i, "B").Value = ws.Cells(i - 1, "B").Value + 1 'if not the same, then add 1 to the invoice number
    End If
Next i

End Sub

这可以用一个简单的公式来完成。这可以用一个简单的公式来完成。一个假设是另一个假设是公司的列表被排序。在实现上述逻辑之前,我添加了一行代码,按照公司名称对工作表进行排序。你完全正确@cknowlan。我只是假设A列已经排序,另一个假设是公司的列表已经排序。在实现上述逻辑之前,我添加了一行代码,按照公司名称对工作表进行排序。你完全正确@cknowlan。我只是假设A列已排序。