Как использовать IF для отбора клеток? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть сводная точка, и я хочу сосчитать 6 ячеек с последней строки, однако, когда-нибудь в сводной ячейке будет меньше 6 ячеек со значением.

В таком случае, как я могу использовать, если выбор ячеек меньше 6 ячеек со значением?

Как я могу сказать: ЕСЛИ выбор меньше 6 ячеек со значением Затем подсчитать общее количество ячеек со значением.

    Sub Last_6_Months_Frequency()


    Dim lastRow As Long
    Dim Seltall As Long
    Dim Seltallc As Long
    Dim cseleall  As Long


        With Sheet1
        lastRow = .Cells(Rows.count, 4).End(xlUp).row
        .Range("D3").Formula = "=AVERAGE(D" & lastRow - 6 & ":D" & lastRow - 1 & ")"

 if selection  < 6 celss then

        lastRow = .Cells(Rows.count, 4).End(xlUp).Offset(-1, 0).Select


        Seltall = Range(Selection, Selection.End(xlUp)).Select

        Seltallc = Application.sum(Selection)

        lastRow = .Cells(Rows.count, 4).End(xlUp).Offset(-1, 0).Select

        Seltall = Range(Selection, Selection.End(xlUp)).Select

        cseleall = WorksheetFunction.count(Selection)

      .Range("D3").Value = Application.sum(Seltallc) / WorksheetFunction.count(Selection)


      End With

1 Ответ

3 голосов
/ 23 апреля 2020

Это можно сделать, выполнив итерацию по ячейкам и проверив наличие пустых значений, если вы столкнетесь с приращением значения переменной.

Я также удалил все ваши выборки.

Если есть вероятность того, что lastrow - 1 равно <= <code>row(6), вам следует добавить чек, иначе он будет кричать о наличии строки 0 или отрицательного значения.

    Dim lastRow As Long
    Dim rangetouse As Range
    With Sheet1
        lastRow = .Cells(Rows.Count, 4).End(xlUp).Offset(-1, 0).Row

        Set rangetouse = .Range(.Cells(lastRow, 4), .Cells(lastRow - 6, 4))

        Dim cell As Variant
        Dim valcount As Long
        valcount = 0
        For Each cell In rangetouse
            If cell.Value <> "" Then
                valcount = valcount + 1
            End If
        Next cell

        If valcount < 6 Then
            .Range("D3").Value = Application.Sum(rangetouse) / Application.Count(rangetouse)
        End If

    End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...