Как пройти через ячейки в секции столбцов в пределах диапазона? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать график планирования в Excel. На одном листе есть раздел ячеек E6: W45, в котором есть данные, которые я хочу просмотреть. Некоторые ячейки в этом разделе заполнены, а некоторые нет, и я просто проверяю, есть ли в них что-то.

Мне удалось сделать это, чтобы рассчитать «фактический» процент выполненных работ. Однако сейчас я пытаюсь рассчитать «запланированный» процент выполнения. Для этого мне нужно сначала взглянуть на диапазон E4: W4, поскольку в каждой ячейке есть число, показывающее, какая это неделя. Затем для каждой ячейки в этом диапазоне, которая меньше или равна фактическому номеру недели, я хочу затем выполнить цикл по ячейкам в соответствующих столбцах в другом диапазоне E6: E45.

например. если это текущая неделя 10. Первое, что произойдет, это 10-я неделя, 11-я неделя, 12-я неделя ... и так далее, вплоть до 16-й недели засчитываются как прошедшие. Затем в другом диапазоне я хочу просмотреть ТОЛЬКО ячейки в тех столбцах, которые были впервые подсчитаны. Кто-нибудь знает, как я мог это сделать, я пробовал много вещей, но они не работают.

Я думаю, что мне может понадобиться вручную создать новый диапазон из выходов в функции. Однако я не уверен, как это сделать.

Function CalcTarget1(range_data As Range, other_range As Range, weeksOut As Integer)

    Dim cell As Range
    Dim col As Range
    Dim c As Range

    Dim count As Double
    Dim sum As Double
    Dim box As Double

    For Each cell In range_data
        If cell.Style = "Style 1" Then
            count = count + 1
        End If
    Next cell

    If count > 0 Then
        sum = 100 / count
    Else
        sum = 0
    End If

    For Each col In range_data
            If col.Value > weeksOut Then
                For Each c In other_range
                    If c.Style = "Style 1" Then
                          box = box + 1
                     End If
                Next c
        End If
    Next col

    CalcTarget1 = Round(sum, 1) * box & "%"

End Function

Этот код работает неправильно, так как возвращает 0%

Спасибо за потраченное время.

1 Ответ

0 голосов
/ 23 января 2019

Исходя из вашего вопроса, я понял следующие шаги:

  1. Пройдите через ячейки E4 до W4 и проверьте значение ячейки
  2. Если значение ячейки меньше или равно номеру недели, выполните цикл по строкам этого столбца с 6 по 45
  3. Сделайте что-нибудь с клеткой (возможно, посчитайте? Этот шаг не ясен в вашем вопросе. Похоже, вы знаете, как считать то, что хотите, вам просто нужно знать, как сначала выполнить шаги 1 и 2)

Итак, я написал небольшую функцию, которая должна выполнить эту задачу. Возвращает описание ошибки в случае сбоя. Просто включите все, что вы рассчитываете.

Function ColumnLooper(iWeekNum As Long) As Variant
    On Error GoTo errHandler

    'declarations
    Dim iCol As Long, iRow As Long
    Dim myRange As Range

    'initial cell, (top left)
    Set myRange = Range("E4")

    'Check week number
    'by looping through cells E4:W4
    For iCol = 0 To 18
        'Check if the cell value is less than or equal to
        'the week number
        If myRange.Offset(0, iCol).Value <= iWeekNum Then
            'Loop through the corresponding column
            'if the above statement is true (You could
            'also do anything else here)
            For iRow = 2 To 41
                'Do whatever you want here...
                'if you want to reference the specific
                'cell, use myRange.Offset(iRow, iCol)

            Next iRow
        End If
    Next iCol

Exit Function
errHandler:
    'return error
    ColumnLooper = Err.Description
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...