VBA: Если заявление заменить номер недели на текст - PullRequest
0 голосов
/ 06 июля 2018

В моей книге "isum" у меня есть номер недели, вычисленный по формуле WEEKNUM (сейчас это 27-я неделя), который указан в столбце X под надписью Week #. Рабочий лист называется «Заказы» с данными, чтобы увидеть, какие заказы задерживаются. Я изо всех сил пытаюсь создать оператор if / then, который делает так, чтобы все номера недель в столбце X (начиная с X2), которые были <27 (номер текущей недели из 52), были помечены как «Поздние». Я не уверен, как изменить это значение на текст, но сложная часть заключается в том, чтобы каждая неделя изменилась, пока не достигнет 52. В противном случае ничего не изменится, что является «Поздно». Если это не имеет смысла, дайте мне знать, но это то, что я имею до сих пор: </p>

isum.Sheets("Orders").Activate Range("X2").Formula = "=WEEKNUM(RC[-9])" Range("X2", "X" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown 'Change statement to say "Late" and account for changing week numbers after every week If cell.Value < 27 Then cell.Value = "Late"

example of dilemma

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я бы предложил пользовательский числовой формат, который отображает Late для недель меньше 27, но сохраняет базовое числовое значение недели для использования в будущих вычислениях. Это может быть применено с помощью правила условного форматирования, которое сравнивает результат формулы недели с текущим значением недели для динамических результатов неделя за неделей.

With isum.workSheets("Orders")
    With .Range(.Cells(2, "X"), .Cells(.Rows.Count, "O").End(xlUp).Offset(0, 9))
        .Formula = "=weeknum(o2)"
        .NumberFormat = "0_)"
        .FormatConditions.Delete
        With .FormatConditions.Add(Type:=xlExpression, Formula1:="=x2<weeknum(today())")
            .NumberFormat = "L\at\e_)"
            'optionally apply a red fill color
            '.interior.color = vbred
        End With
    End With
End With
0 голосов
/ 06 июля 2018

Попробуйте перебрать диапазон

Dim col As Range: Set col = Worksheets("Orders").Range("X2:X" & <current week num>)
Dim i As Integer
For i = 1 To col.Rows.Count
    col.Cells(RowIndex:=i, ColumnIndex:="X").Value = "Late"
Next

(http://codevba.com/excel/for_each_cell_in_range.htm)

...