在 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
答案3
您至少还可以通过另外两种方式来解决这个问题:
将数据范围设为正式的 Excel 表格。在 ID 列中放置一个公式,该公式查看其上方的单元格并添加 1。每次您在下一个空行中输入任何内容时,Excel 都会将该行添加到表格中。这样做时,它将计算/填充该行的 ID 单元格。QED。
如果不需要表格(至少有两个非常好的理由:您不希望其他列的填充公式下降,因为这些公式可能有所不同或者根本不需要,如果您不想要 ID 麻烦,您不想检查和/或编辑每行的公式会增加更大的麻烦,或者,完全不同的事情,您需要动态数组公式,而表格不能有它们),您可以自己做这项工作。
您可以在 ID 列中放置适当的公式,并将其包装在 中IF
。这个想法是将该行中所有其他列的单元格(&
、CONCATENATE
、CONCAT
、TEXTJOIN
... 任何最适合您的)连接起来,然后进行IF
测试does that equal ""
,如果是,""
则输出单元格为空白,如果不是,则执行“上方行 + 1”计算以填充。
您也可以将其设为动态数组公式,这样您就不必担心填充几百或几千个额外的行/单元格,这样您只需每隔一两年考虑一下。这根本不简单,但也许可以。