获取一个列的多个部分的计数

我有这样一张桌子:

A1 B1 Team 1 C1 Team 2 D1 Team 3 A2 Name B2 A C2 B D2 C A3 B3 D C3 E D3 F A4 B4 G C4 D4 H A5 School B5 AB C5 CD D5 A6 B6 GH C6 EF D6 A7 B7 C7 IJ D7 

我试图写一个macros来获取非空行的计数,如下所示:

 A1 B1 Team 1 C1 Team 2 D1 Team 3 A2 Name B2 A C2 B D2 C A3 B3 D C3 E D3 F A4 B4 G C4 D4 H A5 B5 3 C5 2 D5 3 A6 School B6 AB C6 CD D6 A7 B7 GH C7 EF D7 A8 B8 C8 IJ D8 A9 B9 2 C9 3 D9 0 

第5行和第9行给出非空白行的计数。 我需要使用macros来做到这一点。

您可以使用VBA中的COUNTA函数来实现这一点。 对于dynamic输出行,我强烈build议标记这些行,以便代码可以轻松find它们。 在这种情况下,我已经通过在单元格A5中放置了“名称计数器”,并在单元格A9中放置了“学校计数器”(在您发布的第二个表格中)。 这些可以在任何你想要的行。 代码只要在列A中就可以find它们

为了将来的参考,使用命名的范围将是一个更干净,更有效的方式来做到这一点。

 Sub der() 'Declare and set worksheet object Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") 'Worksheet name here Dim nameOutRow As Integer, schoolOutRow As Integer Dim ns As Integer, ne As Integer, ss As Integer, se As Integer 'Find the Output rows nameOutRow = Application.Match("Name Count", ws.Columns(1), 0) schoolOutRow = Application.Match("School Count", ws.Columns(1), 0) 'Determine Name count range ns = Application.Match("Name", ws.Columns(1), 0) 'name start row ne = nameOutRow - 1 'name end row 'School count range ss = Application.Match("School", ws.Columns(1), 0) 'school start row se = schoolOutRow - 1 'school end row 'Names ws.Range("B" & nameOutRow) = Application.CountA(ws.Range("B" & ns & ":B" & ne)) ws.Range("C" & nameOutRow) = Application.CountA(ws.Range("C" & ns & ":C" & ne)) ws.Range("D" & nameOutRow) = Application.CountA(ws.Range("D" & ns & ":D" & ne)) 'Schools ws.Range("B" & schoolOutRow) = Application.CountA(ws.Range("B" & ss & ":B" & se)) ws.Range("C" & schoolOutRow) = Application.CountA(ws.Range("C" & ss & ":C" & se)) ws.Range("D" & schoolOutRow) = Application.CountA(ws.Range("D" & ss & ":D" & se)) End Sub