我有一个Excel 2013工作表,其中每列都有一个标题行,然后是" DIRECT"在一些或所有细胞中。列中没有其他数据,只是" DIRECT"或空白。没有列是空白的,它们都有" DIRECT"至少一次。
我正在寻找执行以下操作的宏:
我录制了一个接近的宏,但它有两个问题:
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"可以确定数据可能的最后一行("用户名"列",因此没有空白) - 尽管最后一行也会在不同工作表之间发生变化。
第2行(标题行)可以确定数据的最后一列 - 它没有空白列;在每一列中,至少有一个单元格将包含" DIRECT"。
有关编辑现有宏或从头编制新宏的任何建议都将非常感谢!
谢谢!
更新
非常感谢Scott,这就是我最终得到的结果 - 这会将非空白单元格数添加到活动工作表中,并在最后一行停止包含数据。我只是直接调用它,没有下面提出的第二部分代码:
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
答案 0 :(得分:1)
Give this a shot. I made a separate sub that you can pass the worksheet reference too.
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
Call it like this:
Sub ColumnCount()
AddColumnCountsRecorded Worksheets("Sheet1")
End Sub