使用VBA计算找到的列中的单元格数量
我对VBA非常新,我一直在创建一个简单的报表多天,因此我决定询问一些帮助。我会非常感谢您提供的任何提示,或者可能指出我在代码中可能犯的任何错误。使用VBA计算找到的列中的单元格数量
我有下面的一段代码(从我的循环中提取)。我想要做的就是创建一个基于约20 Excel文件的列表,将有如下统计:
- 工作簿中的一列非空白的
- 计数内当前选项卡的名称,其名称中包含单词“差”(总第7行,但可以在不同的列)
- 计数来自同一列,但其中细胞不空,比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)
是否有可能是我的问题是由于在源文件中包含单词“差异”的列有时是两个合并的列?不幸的是,我无法改变,因为这些是自动从另一个程序生成的文件。
xlWorkBook.Worksheets(i).Myrng
不是有效Range
语法,而你可以简单地使用MyRng
,你已经设置为不空Range
参考,并已拥有两家母公司worksheet
和workbook
引用内它
但即使Myrng.Offset(9999, 2).Cells
止跌”做T,因为其只引用而不是一个单元格的单元格区域
你需要一个Range(Range1, Range2)
语法,其中既Range1
和Range2
有效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
@Maja,你通过它了吗? – user3598756
是什么'xlWorkbook'? – user3598756