自动填充新行的 ID 字段

自动填充新行的 ID 字段

在 Excel 中,当同一行中的某一列已填充时,是否有办法自动填充/增加某一列?例如,假设我有一个 ID 和名称列。当我为新行填写名称列时,我希望同一行中的 ID 列自动填充为下一个数字(即上一个 ID + 1)。我不想复制公式或以任何方式触碰该 ID 字段。

那可能吗?

谢谢史蒂文

答案1

魔法?Excel 或其他电子表格中不存在这种东西。

=IF(AND(A1<>"";B2<>"");A1+1;"") <- 输入 A2 并“向下填充”

例如复制 A2(即将光标放在 A2,CTRL+ C),然后...

CTRL+粘贴V到 A 列中任意数量的行中。

在 A1 中填入一个值,在 B1(第一行)中输入一些内容。
然后在 B2、B3、B4 中输入一些内容...


极端情况是所有行,这可能会减慢电子表格的速度

不过它确实很快就完成了:

Excel:
击打End,按住SHIFT,击打,Cursor down放手SHIFT
CTRL+ V,,EndCursor up

LibreOffice:
按住,击打SHIFT,放手+按住,击打CTRLCursor down
CTRLVCTRLCursor up

...并且 A 列中除 A1 之外的所有单元格中都有该公式。

答案2

如果您习惯使用 VBA,下面的代码是一个很好的起点。它应该粘贴到您希望此 ID 字段所在的工作表对象中。它并不完美,您应该在复制/粘贴之前尝试理解它,以确保它适合您。它会监视特定列的变化。每当该列中的某些内容发生变化时,它都会检查同一行中的另一个单元格。如果另一个单元格为空白,它会用另一列中的最大值加一来填充它。这会在某一列中创建一个数字唯一 ID。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    ' Setup the columns you care about here
    Const nameColumnLetter = "D"
    Const idColumnLetter = "A"
    
    ' Declare some variables for easier reference later
    ' This is not necessary but it makes the code in the next section easier to follow
    Dim idCell As Range
    Dim idColumn As Range
    Dim nameColumn As Range
    Set idCell = Range(idColumnLetter & Target.Row)
    Set idColumn = Range(idColumnLetter & ":" & idColumnLetter)
    Set nameColumn = Range(nameColumnLetter & ":" & nameColumnLetter)
    
    ' Check if the changed cell is in the Name column
    If Not Intersect(Target, nameColumn) Is Nothing Then
        ' Check if the ID column is blank
        If Len(idCell.Value) = 0 Then
            ' Set the ID value to the max of that column plus one
            idCell.Value = Application.WorksheetFunction.Max(idColumn) + 1
        End If
    End If
    
End Sub

如何在 MS Office 中添加 VBA?

答案3

您至少还可以通过另外两种方式来解决这个问题:

  1. 将数据范围设为正式的 Excel 表格。在 ID 列中放置一个公式,该公式查看其上方的单元格并添加 1。每次您在下一个空行中输入任何内容时,Excel 都会将该行添加到表格中。这样做时,它将计算/填充该行的 ID 单元格。QED。

  2. 如果不需要表格(至少有两个非常好的理由:您不希望其他列的填充公式下降,因为这些公式可能有所不同或者根本不需要,如果您不想要 ID 麻烦,您不想检查和/或编辑每行的公式会增加更大的麻烦,或者,完全不同的事情,您需要动态数组公式,而表格不能有它们),您可以自己做这项工作。

您可以在 ID 列中放置适当的公式,并将其包装在 中IF。这个想法是将该行中所有其他列的单元格(&CONCATENATECONCATTEXTJOIN... 任何最适合您的)连接起来,然后进行IF测试does that equal "",如果是,""则输出单元格为空白,如果不是,则执行“上方行 + 1”计算以填充。

您也可以将其设为动态数组公式,这样您就不必担心填充几百或几千个额外的行/单元格,这样您只需每隔一两年考虑一下。这根本不简单,但也许可以。

相关内容