繁体   English   中英

遍历工作表并尝试计算列中的数据

[英]Looping through worksheets and trying to count the data in columns

我有一本十张的工作簿。 在工作表1中,我想列出工作表名称(工作表3至10),工作表中的列标题值(仅第8列及更多列),并为该列列出其中包含数据的单元格数。

我的代码可满足这三个需求中的两个。 在我的工作表1(名为:SheetName Columns)上,我在A列中获得了工作表名称,在B列中获得了列标题,但是运气不佳,无法获得该工作表/列数的数据行。

在我的工作表1上,该工作表的第7列之后的每列数都会重复A列,这很好。

Sub ListColumnHeadings()

Dim cNbrs As Long, i As Integer, tr As Long, tc As Long, wst As Worksheet
Dim charList(300, 300) As String

Dim ws As Worksheet, OutputRow As Long
Dim myRange As Range
Dim NumRows As Integer
Dim colNbr As Range

Set shSkip1 = ThisWorkbook.Sheets("SheetName Record Cnt")
Set shList = ThisWorkbook.Sheets("SheetName Columns")

OutputRow = 1
On Error Resume Next

For Each ws In Worksheets
  If ws.Name <> shList.Name And ws.Name <> shSkip1.Name Then

    cNbrs = ws.Range("A1").CurrentRegion.Columns.Count

    For i = 8 To cNbrs
      shList.Cells(OutputRow, "A").Value = ws.Name
      shList.Cells(OutputRow, "B").Value = ws.Cells(1, i)

      Set myRange = ws.Columns(i).Select

      NumRows = ws.Application.WorksheetFunction.CountA(myRange)
      If NumRows > 0 Then
        shList.Cells(OutputRow, "C").Value = NumRows
      End If

      OutputRow = OutputRow + 1
    Next i

  End If
Next ws


End Sub

这是因为你使用的Set myRange...你并不需要.Select它。 只需将该行更改为Set myRange = ws.Columns(i)

如果要离开.Select ,那么下一行应该是NumRows = ws.application.worksheetfunction.counta(selection) ,但是强烈建议您避免使用.Select ,这只是为了您的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM