如果某个范围内存在非零值,VBA脚本应该返回工作表的名称

我正在运行一个包含多个工作表的单个工作簿的报告。 但是,我只想知道在一个范围内是否有一个非零值; 即Range("B33:J33") 。 假设在10个工作表中,其中3个在build议范围内具有非零值。

我能否提示一个消息框告诉我哪个3个工作表具有非零值?

 Dim rngToCheck As Range Set rngToCheck = Range("B33:J33") Dim cell As Range Dim counter As Integer Dim active As Integer, count As Integer Worksheets(1).Select count = Worksheets.count active = ActiveSheet.Index + 1 counter = 0 Do Until active > count rngToCheck.Select For Each cell In Selection If cell.Value <> 0 Then counter = counter + 1 End If ActiveSheet.Next.Select Next Loop msgbox counter 

首先在你的子文件中定义:

 Dim rngToCheck as Range Set rngToCheck = Range("B33:J33") Dim cell as Range Dim counter as Integer counter =0 

为每个工作表和工作表运行一个FOR EACH循环,并在其内部运行另一个FOR EACH循环,其中说:

 rngToCheck.Select FOR EACH cell in Selection IF cell.Value <>"0" then counter = counter+1 end if next 

然后,只要一个简单的条件为计数器值,如果它将为零,没有发现细胞,否则发现…

你可以试试这个

 Dim wr, r As Integer, nr As Integer nr = Sheets.Count For r = 1 To nr With Sheets(r) If Application.CountIf(.Range("B33:J33"), "<>0") - Application.CountBlank(.Range("B33:J33")) > 0 Then MsgBox .name End If End With Next 

我假设你也不想要空单元格。

 Dim sheetNames(1 to 100) As String Dim snIndex As Integer snIndex = 1 For Each sheet In ActiveWorkbook.Worksheets For Each cll in rngToCheck If cll.Value <> "" Then If IsNumeric(cll.Value) Then If cll.Value > 0 Then sheetNames(snIndex) = sheet.Name snIndex = snIndex + 1 Break For End If End If End If Next cll Next sht Dim message As String message = "" Dim i As Integer For i = 1 to snIndex - 1 message = message & "; " & sheetNames(i) Next i msgbox message