使用VBA计算找到的列中的单元格数量

使用VBA计算找到的列中的单元格数量

问题描述:

我对VBA非常新,我一直在创建一个简单的报表多天,因此我决定询问一些帮助。我会非常感谢您提供的任何提示,或者可能指出我在代码中可能犯的任何错误。使用VBA计算找到的列中的单元格数量

我有下面的一段代码(从我的循环中提取)。我想要做的就是创建一个基于约20 Excel文件的列表,将有如下统计:

  1. 工作簿中的一列非空白的
  2. 计数内当前选项卡的名称,其名称中包含单词“差”(总第7行,但可以在不同的列)
  3. 计数来自同一列,但其中细胞不空,比0.

不同在过去的统计我甚至没有时间等,你不会在我的代码中看到它,但我会很感激,如果你有这方面的任何提示(wh最好使用这种方法)。

Windows("PassRate.xlsm").Activate 
b = ActiveSheet.Cells(Rows.count, 2).End(xlUp).Row + 1 
Cells(b, 3) = xlWorkBook.Worksheets(i).Name 
xlWorkBook.Worksheets(i).Activate 
Set Myrng = Range("B7:M9999").Find(What:="Difference", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False) 
If Not Myrng Is Nothing Then 
RowQnt = xlWorkBook.Worksheets(i).Myrng.Offset(9999, 2).Cells.SpecialCells(xlCellTypeConstants).count 
End If 
Windows("PassRate.xlsm").Activate 
Cells(b, 4) = RowQnt 

我的问题是,宏运行和工作,但结果我得到的是选项卡名称的列表中,但所有计数为0,我不能克服这个问题。对于第7行,我也尝试了下面的代码段,得出相同的结果。

RowQnt = xlWorkBook.Cells(Rows.count, Myrng).End(xlUp) 

是否有可能是我的问题是由于在源文件中包含单词“差异”的列有时是两个合并的列?不幸的是,我无法改变,因为这些是自动从另一个程序生成的文件。

+0

是什么'xlWorkbook'? – user3598756

xlWorkBook.Worksheets(i).Myrng不是有效Range语法,而你可以简单地使用MyRng,你已经设置为不空Range参考,并已拥有两家母公司worksheetworkbook引用

但即使Myrng.Offset(9999, 2).Cells止跌”做T,因为其只引用而不是一个单元格的单元格区域

你需要一个Range(Range1, Range2)语法,其中既Range1Range2有效Range的r eferences的范围内的第一个和最后一个单元格,你居然要计算

没有空白单元格此外,你还可以使用,而不是SpecialCells(xlCellTypeConstants)范围WorksheetFunction.CountA()功能,因为后者的错误了,如果没有不断细胞在范围内找到它被应用到(所以你需要一个检查),如果没有不为空细胞被发现

所有东西上面,你可以写下面GetRowQnt()功能,而前者只是简单地返回零:

Function GetRowQnt(sht As Worksheet) As Long 
    Dim Myrng As Range 

    With sht '<--| reference passed worksheet 
     Set Myrng = .Rows(7).Find(What:="Difference", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False) '<--| find "Difference" in its 7th row 
     If Not Myrng Is Nothing Then GetRowQnt = WorksheetFunction.CountA(.Range(.Cells(8, Myrng.Column), .Cells(WorksheetFunction.Max(.Cells(.Rows.count, Myrng.Column).End(xlUp).row, 8), Myrng.Column))) '<--| count not blank cells in column where "Difference" was found from row 8 down to its last not empty cell 
    End With 
End Function 

并且按如下方式使用它在你的主代码:

With Windows("PassRate.xlsm").ActiveSheet '<--| reference "PassRate.xlsm" workbook active sheet (or change 'ActiveSheet' with 'Worksheetes("yourSheetName")') 
    For i = 1 To xlWorkbook.Worksheets.count '<--| loop through 'xlWorkbook' workbook worksheets 
     b = .Cells(.Rows.count, 3).End(xlUp).row + 1 '<--| get "PassRate.xlsm" workbook active sheet current first empty cell in column "C" 
     .Cells(b, 3) = xlWorkbook.Worksheets(i).Name 
     .Cells(b, 4) = GetRowQnt(xlWorkbook.Worksheets(i)) 
    Next 
End With 

请注意,

b = .Cells(.Rows.count, 3).End(xlUp).row + 1 

我把列“C”为主导的一个获得持续的不空行,因为没有您的帖子中的代码在“B”列中写了一些内容。

但是如果你真正的代码有一些

.Cells(b, 2) = somedata '<--| write something in column "B" current row 

,那么你可以回去b = .Cells(.Rows.count, 2).End(xlUp).row + 1

+0

@Maja,你通过它了吗? – user3598756