簡體   English   中英

Excel中的計數器循環

[英]counter loop in Excel

所以我有一個包含多個工作表的Excel工作簿。 每個工作表都是相同的模板。 並且單元格B3-B39,C3-C39和D3-D39將包含3個值之一。 1,.5或完全沒有值(完全空白)。 現在,每個工作表都不完全相同(有些工作表將轉到B / C / D45,而不僅僅是B / C / D39)。 我正在嘗試讓另一個單元格顯示其中有多少個單元格包含1,另一個單元格顯示有多少個單元格包含.5。 是的,我可以手動執行此操作,但是我正在嘗試使其盡可能自動化。

正如@Variatus所建議的那樣,您可以只使用COUNTIF工作表功能,但是如果您想通過VBA進行此操作,則需要執行以下操作:

方法

  1. 確定最后一行
  2. 建立范圍
  3. 計算此范圍內有多少個單元格包含1
  4. 計算此范圍內有多少個單元格包含.5
  5. 用這些計數做點什么

Sub CountTheSheets()

    Const Value10 As Double = 1, Value05 As Double = 0.5 ' these are what we're comparing cell values against

    Dim Count10 As Long, Count05 As Long ' these are our 1 and .5 counts respectively
    Dim lastRow As Long, lastRowTemp As Long, maxRow As Long
    Dim ws As Worksheet
    Dim cel As Range

    For Each ws In ThisWorkbook.Worksheets ' iterate over all worksheets

        lastRow = 0 ' reset the last row for this worksheet
        Count10 = 0 ' reset the 1 count for this worksheet
        Count05 = 0 ' reset the .5 count for this worksheet

        With ws

            maxRow = .Rows.Count ' this is the absolute bottom row in a worksheet

            ' get last row of column B, by going to the bottom of the worksheet in that column, then using End and going up to find the last cell
            lastRowTemp = .Cells(maxRow, "B").End(xlUp).Row
            If lastRowTemp > lastRow Then lastRow = lastRowTemp

            ' get last row of column C; if larger than the previous, store in lastRow that row number instead
            lastRowTemp = .Cells(maxRow, "C").End(xlUp).Row
            If lastRowTemp > lastRow Then lastRow = lastRowTemp

            ' get last row of column D; if larger than the previous, store in lastRow that row number instead
            lastRowTemp = .Cells(maxRow, "D").End(xlUp).Row
            If lastRowTemp > lastRow Then lastRow = lastRowTemp

            ' build the range using lastRow, and iterate through the cells in that range, counting the matching values
            For Each cel In .Range("B3:D" & lastRow)

                If cel.Value = Value10 Then
                    Count10 = Count10 + 1
                ElseIf cel.Value = Value05 Then
                    Count05 = Count05 + 1
                End If

            Next cel

            ' do something with these counts
            Debug.Print .Name, Count10, Count05

        End With
    Next ws

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM