如何在Excel中粘贴数据的末尾运行一个函数?
我有一个Excel工作表粘贴一些数据,我想在每列的末尾粘贴数据自动运行一个函数来计算有一些文本的单元格的数量,然后给这个行包含公式一个特定的颜色。
例如,我粘贴下面的数据:
现在我想在每列的末尾运行一个函数,它将显示包含“错误”的单元格的数量。
第一列的function是=countif(A2:A9, "Error")
,第二列的function是=countif(B2:B9, "Error")
等等。
提前感谢任何帮助。
格式化一个空白表并创build一个总和行(点击表 – > Tabletools – > Sum行):
在总和行中写入你的公式: =countif([Second],"Error")
现在,您可以简单地复制数据,然后计算最后一行中的出现次数。 在粘贴表格时,会自动向下移动和列。
扩大Doomenik的答案
第1部分将数据设置为表并插入总行。 根据需要调整下表名称。
然后插入总行,方法是进入devise选项卡,该选项卡位于表格范围内时出现,然后选中“ Total Row
框
总共一行将出现在表格的底部,并带有下拉图标
从列A开始,您要selectCOUNTIF
函数应用于总行,这意味着从下拉列表中selectMore Functions
,然后inputCOUNTIF
。
在出现的框中input以下内容:
请注意,表中列A的整个数据区域都由[ID]
引用。 当您为COUNTIF
指定范围参数时select表A的列范围的数据区域时,将自动进入此选项,即select如下:
标准参数是NA()
代表错误。
然后将公式从列A中的总行中拖动到列C,自动填充将完成其余部分。
第2部分:通过使用将条件格式应用于总行
=ISFORMULA(INDIRECT("Table1[#Totals]"))
在Excel 2016或
=LEFT(FORMULATEXT(INDIRECT("Table1[#Totals]")),8) = "=COUNTIF"
在早期版本中。
input公式:
现在,指定要应用的范围:
我搞砸了指定最后一行
=INDIRECT("Table1[#Totals]")
事实certificate,Excel仍然将其转换为当前最后一行范围,例如
=$A$11:$C$11
即使我添加行到表中更新。
第3部分:通过粘贴添加新行
现在,如何处理通过粘贴添加行? 将以下代码插入到包含表格的工作表中。
然后将新行粘贴到总计行的第一列,它将更新并向下移动总计。
Option Explicit Private Const SingleRowOnly As Boolean = False Private Const MaxRowCount As Long = 100 Private Sub Worksheet_Change(ByVal Target As Range) Dim ResizeRange As Range Dim Table As ListObject Dim TotalsShowing As Boolean Dim ExpandTables As Boolean Dim RowIndex As Long Dim RowCount As Long ' Make sure sheet isn't protected If Me.ProtectContents Then Exit Sub ' If already in a table, then exit If Not Target.ListObject Is Nothing Then Exit Sub ' Make sure only one row is being changed If Target.Rows.Count > 1 Then Exit Sub ' Make sure we're not in row 1 If Target.Row = 1 Then Exit Sub ' Make sure we're in the row right under the Totals row If Target.Offset(-1, 0).ListObject Is Nothing Then Exit Sub ' Set table Set Table = Target.Offset(-1, 0).ListObject TotalsShowing = Table.ShowTotals ExpandTables = Application.AutoCorrect.AutoExpandListRange ' If Totals not showing, exit If Not TotalsShowing Then Exit Sub ' Make sure the selection is a contiguous range If Target.Areas.Count > 1 Then Exit Sub ' Make sure Target range is within the table columns If Target(1, 1).Column < Table.ListColumns(1).Range.Column Then Exit Sub If Target(1, Target.Columns.Count).Column > Table.ListColumns(Table.ListColumns.Count).Range.Column Then Exit Sub ' Prepare to adjust table Application.EnableEvents = False Table.ShowTotals = False Application.AutoCorrect.AutoExpandListRange = True ' Set the resize range If WorksheetFunction.CountA(Table.Range(1, 1).Offset(Table.Range.Rows.Count + 1).Resize(1, Table.Range.Columns.Count)) > 0 Then If Not SingleRowOnly Then RowIndex = Target.Row RowCount = RowIndex Do Until WorksheetFunction.CountA(Me.Range(Me.Cells(RowCount, Table.Range(1, 1).Column), Me.Cells(RowCount, Table.Range(1, Table.ListColumns.Count).Column))) = 0 Or RowCount - RowIndex > MaxRowCount RowCount = RowCount + 1 Loop Set ResizeRange = Table.Range.Resize(Table.Range.Rows.Count + RowCount - RowIndex, Table.Range.Columns.Count) Else Set ResizeRange = Table.Range.Resize(Table.Range.Rows.Count + 1, Table.Range.Columns.Count) End If Else Set ResizeRange = Table.Range.Resize(Table.Range.Rows.Count + 1, Table.Range.Columns.Count) End If ' Make table adjustment Table.Resize ResizeRange ' Put things back the way we found them Application.AutoCorrect.AutoExpandListRange = ExpandTables Table.ShowTotals = TotalsShowing Application.EnableEvents = True End Sub
从链接引用:
这个代码的顶部有两个常量声明。
SingleRowOnly。 这指定是否应将多个行附加到表中,或者应该只有一行。
MaxRowCount。 至于不自动将行附加到表中,这是任何时候包含的最大行数。 如果SingleRowOnly被设置为True,这个常量是没有意义的。
所以你可以适当调整。
通过自动完成,它应该自动更新列引用
编辑
如果您想自动执行此操作,也许可以尝试在数据末尾粘贴以下公式:
=COUNTIF((INDIRECT(ADDRESS(ROW()-8;COLUMN()))):(INDIRECT(ADDRESS(ROW()-1;COLUMN()))); "Error")
说明
COUNTIF(range; pattern)
范围由两个INDIRECT
函数指定。 一个指向第一行,一个指向最后一个(分别是8和1)。
所以范围如下所示:
(INDIRECT(ADDRESS(ROW()-8;COLUMN()))) : (INDIRECT(ADDRESS(ROW()-1;COLUMN())))
请注意 ,我假设你总共有8行,但你可以在那里放任何其他的数字