![对新行使用预先存在的函数](https://linux22.com/image/1317752/%E5%AF%B9%E6%96%B0%E8%A1%8C%E4%BD%BF%E7%94%A8%E9%A2%84%E5%85%88%E5%AD%98%E5%9C%A8%E7%9A%84%E5%87%BD%E6%95%B0.png)
我有一个包含 X 列和 N 行的 Excel 文档。
行的最后一列执行SUM
前 X-1 列的操作。我遇到的问题是,此 Excel 文档的用户会逐步向文档中添加行,因此,新行的最后一列中尚不存在该函数。
我需要一种方法来让这个函数动态地存在于新行中(用户不懂 Excel 并且没有能力将函数拖到一行下来)。
答案1
不幸的是,无法完成基本操作的用户非常普遍。您可能会采取某种措施来完全重写公式(诚然,这有点过头了),但看看您是否可以在 Worksheet_SelectionChange 事件中采用这个想法。或者启用宏也可能会使他们陷入困境。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
LastRow = ActiveSheet.UsedRange.Rows.Count
Range("D2:D" & LastRow).Formula = "=SUM(INDIRECT(""A""&ROW()&"":C""&ROW()))"
End Sub
用于小计
Range("D2:D" & LastRow).Formula = "=SUBTOTAL(9,(INDIRECT(""A""&ROW()&"":C""&ROW())))"
答案2
您可能可以使用 VBA 使其真正动态化,但我认为仅仅向单元格添加公式就有点过头了。您可以做的是让单元格看起来是空的,直到将数据添加到相关单元格,然后将该单元格向下拖动数百或数千行。
例如,=IF(LEN(A1)=0,"",A1+B1)
如果 A1 不包含数据,则显示一个空单元格,但如果包含数据,则执行 A1+B1 函数。如果您将其拖到最后一行下方,则该列将显示为空白,直到将数据添加到 A 列的下一个单元格。
您还可以使用其他几个公式来检查正在使用的单元格,例如=ISBLANK(A1)
OR =ISTEXT(A1)
,具体取决于您想要如何检查数据。我认为 LEN 函数最容易使用。您还可以执行类似这样的操作,=IF(LEN(A1)+LEN(B1)=0,"",A1+B1)
如果其中一个单元格有数据,则运行公式,或者=IF(OR(LEN(A1)=0,LEN(B1)=0),"",A1+B1)
只有两个单元格都有数据,才运行公式。
对于大多数公式,将其扩展到几千行只会使文件大小增加几 KB。如果您有非常长的公式,或者您要拖拽很多公式,那么文件大小会显著增加。
答案3
我必须查看您的工作表,但听起来您可以使用数据透视表。用户只需输入数据,报告就会动态生成和汇总。查看 YouTube 以获取有关如何使用数据透视表的一些说明和演示。