Excelmacros将COUNTA添加到新的顶端行

我有一个Excel 2013工作表,其中每个列都有一个标题行,然后在部分或全部单元格中显示单词“DIRECT”。 列中不存在其他数据,只是“直接”或空白。 没有列是空白的,他们都有“直接”至less一次。

我正在寻找一个macros,它可以做到以下几点:

  • 添加一个新的顶行
  • 忽略原始的标题行,但是获得了其中具有“直接”的单元的计数
  • 将这个数字放在每个列的相应的新顶部单元格中
  • 对工作表中的每个列执行上述操作
  • 无论最后一列还是数据行都可以工作(我必须在几个不同大小的工作表上运行)

我logging了一个接近的macros,但有两个问题:

  1. 它将COUNTA数据添加到工作簿的最后一行,这是不需要的(填充的列将是几百,而不是数千)
  2. 它引用特定的单元格区域,因此可以切断具有更多行的表单的数据
Sub AddColumnCountsRecorded() ' ' AddColumnCounts Macro ' ' Rows("1:1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("J1").Select ActiveCell.FormulaR1C1 = "=COUNTA(R[2]C:R[15]C)" Range("J1").Select Selection.Copy Range(Selection, Selection.End(xlToRight)).Select ActiveSheet.Paste End Sub 

如果有帮助:

  • 列“A”可以确定数据可能的最后一行(这就是“用户名”列,所以没有空白) – 尽pipe最后一行也会在表单之间变化。

  • 第2行(标题行)可以确定数据可能的最后一列 – 它没有空白列; 在每一列中,至less一个单元格将具有单词“直接”。

任何有关编辑现有的macros或从头编写一个新的build议将不胜感激!

谢谢!

更新:

非常感谢斯科特,这是我最后的结果 – 这将非空白单元格计数添加到活动工作表,并停在最后一行的数据。 我只是直接调用它,没有下面提出的第二部分代码:

 Sub AddColumnCountsRecorded() With ActiveSheet .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Dim lRow As Long, lCol As Long lRow = .Range("A" & .Rows.Count).End(xlUp).Row lCol = .Cells(2, .Columns.Count).End(xlToLeft).Column .Range(.Cells(1, 2), .Cells(1, lCol)).FormulaR1C1 = "=COUNTA(R[2]C:R[" & lRow & "]C)" End With End Sub 

给这个一个镜头。 我做了一个单独的子,你也可以传递工作表参考。

 Sub AddColumnCountsRecorded(ws As Worksheet) With ws .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Dim lRow As Long, lCol As Long lRow = .Range("A" & .Rows.Count).End(xlUp).Row lCol = .Cells(2, .Columns.Count).End(xlToLeft).Column .Range(.Cells(1, 2), .Cells(1, lCol)).FormulaR1C1 = "=COUNTA(R[2]C:R[" & lRow & "]C)" End With End Sub 

像这样调用它:

 Sub ColumnCount() AddColumnCountsRecorded Worksheets("Sheet1") End Sub