VBA: оператор If заменяет номер недели текстом

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

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"

пример дилеммы


person Community    schedule 05.07.2018    source источник
comment
Вы действительно хотите удалить номер недели в пользу текста или предпочитаете замаскировать номер, чтобы он отображал «Поздно», сохраняя основное значение?   -  person    schedule 06.07.2018
comment
Я думаю, это не имело бы значения, так как в любом случае это будет сводная таблица, где будут отображаться данные до тех пор, пока не будет ничего, что будет поздно, а не номер недели. Таким образом, фактический номер не будет использоваться, если он опаздывает.   -  person    schedule 06.07.2018


Ответы (2)


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

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)

person cainns98    schedule 05.07.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
person Community    schedule 05.07.2018
comment
Будет ли это чередование недель, поскольку код выполняется каждую неделю? т. е. следующая неделя - это неделя номер 28, поэтому 27 будет считаться опозданием - person ; 06.07.2018
comment
Что происходит, когда вы меняете дату на своем компьютере? - person ; 06.07.2018
comment
Дата моего компьютера была выключена! Так просто, но так важно. Ваш код работает, и спасибо за необязательный красный цвет заливки. - person ; 06.07.2018
comment
Вопрос: если бы я хотел сказать «Просрочено» вместо «Опоздал», как бы я это ввел? Я думаю, я не знаю, как изменить \\. - person ; 06.07.2018
comment
Обратная косая черта — это escape-символ, поэтому такие символы, как D (как в Due), рассматриваются как строковый литерал, а не день. Лично я обычно просто добавляю обратную косую черту, так как однажды меня поймали на выходе неэкранированный b в маске формата. Так что используйте .NumberFormat = "\P\a\s\t \D\u\e_)" и пусть Excel выясняет, нужно ли экранировать все или нет. - person ; 06.07.2018
comment
Возвращаясь к этой теме, у меня есть одна дилемма с выходом. Я хочу того же результата, однако ВСЕ недели указаны как поздние, потому что все номера недель до текущей недели указаны как поздние. Есть ли способ сохранить тот же код, но не включать номера недель 2019 года как опоздавшие? Я отредактировал сообщение, включив в него пример изображения выше, где номер недели имеет формулу WEEKNUM, и я использую ваш точный код. - person ; 09.07.2018