【问题标题】:Counting data across multiple sheets跨多个工作表计算数据
【发布时间】:2018-12-27 15:56:32
【问题描述】:

我想计算一列中有数据的单元格的数量。

我必须从所有工作簿中计算这些单元格。

例如,我有 2 个工作簿:WB1 和 WB2。

  • A1、A2、A3、A4 中包含数据的工作表 WS1
  • 工作表 WS2 与 A1、A2 中的数据。
  • 我的输出应该显示 6。

这个怎么算?

Option Explicit

Private Sub CommandButton1_Click()

    Dim paths(), wbs() As Workbook
    Dim x As Integer
    Dim sh, rn, k

    paths = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLSX), *.XLSX", _
      MultiSelect:=True, Title:="Please browse all the Rawdata files")

    For x = 1 To UBound(paths)
        ReDim wbs(UBound(paths))
        Set wbs(x) = Workbooks.Open(paths(x))

        Set sh = wbs(x).Sheets("Role ID - Description")
        Set rn = sh.UsedRange
        k = rn.Rows.Count + rn.Row - 1 - 1
        wbs(x).Close
    Next

End Sub

【问题讨论】:

  • 你有什么样的“麻烦”

标签: excel vba


【解决方案1】:

您没有在工作簿的工作表之间维护计数器(例如,k = k + 1 迭代 1)。在您的工作簿中,您需要以下内容:

dim i as long, k as long, lr as long
With Workbook("blah")
    For i = 1 to .sheets.count
        With .Sheets(i)
            lr = .cells(.rows.count,1).end(xlup).row
            k = k + lr
        End with
    Next i
    'output k to some destination
    k=0
End with

编辑1:

根据 Kubie 的建议添加计数场景(未经测试):

dim i as long, k as long, cnta as long
With Workbook("blah")
    For i = 1 to .sheets.count
        With .Sheets(i)
            cnta = application.counta(.columns(1))
            k = k + cnta
        End with
    Next i
    'output k to some destination
    k=0
End with

【讨论】:

  • 因为目标似乎是计算包含数据的单元格数量,也许应该使用CountA 而不是查找每张纸的最后一行? (除非没有空白行)
  • @Kubi 好点;根据示例,我从 OP 中假设这些行是连续的,这不一定是正确的。将存在维护 k 的相同场景......为了安全起见,我也会添加您的场景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多