Форматирование ячеек в пределах цикла выделения

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

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

cells.HorizontalAlignment = xlRight
cells.NumberFormat = "mmm-yy"

Я могу сделать это через ниже, но он добавляет 100 строк в код

cell.Offset(0, 0) = "1-Jul-19"
cell.Offset(0, 0).HorizontalAlignment = xlRight
cell.Offset(0, 0).NumberFormat = "mmm-yy"

Есть ли способ сделать это на одной линии, т.е.

cell.Offset(0, 0) = "1-Jul-19".HorizontalAlignment = xlRight.NumberFormat = "mmm-yy"

Помощь будет высоко оценена.

Скотт


**Sub CHANGE_MONTH_LOOP()
Dim rngMyRange As range
Dim cell As range
Set rngMyRange = Selection
For Each cell In rngMyRange.Cells
cell.Offset(0, 0) = "1-Jul-19"

cell.Offset(0, 1) = "1-Aug-19"

cell.Offset(0, 2) = "1-Sep-19"

Next cell

End Sub**

Всего 3 ответа


Назад снова, поэтому, если в @alowflyingpig и мире вашего босса меньше строк обязательно означает более простой, пожалуйста, см. Ниже код, который делает именно то, что делает ваш «полный код» ... но в меньшем количестве строк ...

Sub DATE_MONTHLY_LOOP()
Dim cell As Range, i As Integer
For Each cell In Selection.Cells: For i = 0 To 11: With cell.Offset(0, i): .Value = DateAdd("m", 1 + i, 43617): .HorizontalAlignment = xlRight: .NumberFormat = "mmm-yy": End With: Next i:    With cell.Offset(0, 12): .Value = "FY20 TOTAL": .ColumnWidth = 11.3: .HorizontalAlignment = xlRight: .NumberFormat = "mmm-yy": End With: Next cell
End Sub

ИЗОБРАЖЕНИЕ

Вот как выглядит лист. В основном я использую find / select, а затем в выделенных ячейках я запускаю свой макрос. Я намеренно делаю этот один лист за раз, поскольку есть некоторые исключения. Макрос заполняет соседние ячейки, используя функцию cell.offset.

В идеале все, что я пытаюсь сделать, это получить эти три команды на одной строке

cell.Offset(0, 0).HorizontalAlignment = xlRight
cell.Offset(0, 0).NumberFormat = "mmm-yy"
cell.Offset(0, 0) = "1-Jul-19"

т.е. cell.Offset (0, 0) .HorizontalAlignment = xlRight.NumberFormat = "mmm-yy" .value = "1-Jul-19"

Кто-нибудь знает, можно ли это сделать?

ПОЛНЫЙ КОД:

Sub DATE_MONTHLY_LOOP()

Dim rngMyRange As range
Dim cell As range

Set rngMyRange = Selection

For Each cell In rngMyRange.Cells

cell.Offset(0, 0) = "1-Jul-19"
cell.Offset(0, 0).HorizontalAlignment = xlRight
cell.Offset(0, 0).NumberFormat = "mmm-yy"


cell.Offset(0, 1) = "1-Aug-19"
cell.Offset(0, 1).HorizontalAlignment = xlRight
cell.Offset(0, 1).NumberFormat = "mmm-yy"


cell.Offset(0, 2) = "1-Sep-19"
cell.Offset(0, 2).HorizontalAlignment = xlRight
cell.Offset(0, 2).NumberFormat = "mmm-yy"

cell.Offset(0, 3) = "1-Oct-19"
cell.Offset(0, 3).HorizontalAlignment = xlRight
cell.Offset(0, 3).NumberFormat = "mmm-yy"

cell.Offset(0, 4) = "1-Nov-19"
cell.Offset(0, 4).HorizontalAlignment = xlRight
cell.Offset(0, 4).NumberFormat = "mmm-yy"

cell.Offset(0, 5) = "1-Dec-19"
cell.Offset(0, 5).HorizontalAlignment = xlRight
cell.Offset(0, 5).NumberFormat = "mmm-yy"

cell.Offset(0, 6) = "1-Jan-20"
cell.Offset(0, 6).HorizontalAlignment = xlRight
cell.Offset(0, 6).NumberFormat = "mmm-yy"

cell.Offset(0, 7) = "1-Feb-20"
cell.Offset(0, 7).HorizontalAlignment = xlRight
cell.Offset(0, 7).NumberFormat = "mmm-yy"

cell.Offset(0, 8) = "1-Mar-20"
cell.Offset(0, 8).HorizontalAlignment = xlRight
cell.Offset(0, 8).NumberFormat = "mmm-yy"

cell.Offset(0, 9) = "1-Apr-20"
cell.Offset(0, 9).HorizontalAlignment = xlRight
cell.Offset(0, 9).NumberFormat = "mmm-yy"

cell.Offset(0, 10) = "1-May-20"
cell.Offset(0, 10).HorizontalAlignment = xlRight
cell.Offset(0, 10).NumberFormat = "mmm-yy"

cell.Offset(0, 11) = "1-Jun-20"
cell.Offset(0, 11).HorizontalAlignment = xlRight
cell.Offset(0, 11).NumberFormat = "mmm-yy"

cell.Offset(0, 12) = "FY20 TOTAL"
cell.Offset(0, 12).ColumnWidth = 11.3
cell.Offset(0, 12).HorizontalAlignment = xlRight
cell.Offset(0, 12).NumberFormat = "mmm-yy" 

Next cell

End sub

Sub test()


    Dim LastRow As Long
    Dim irow As Long
    Dim jrow As Long
    Dim StartCol As Long
    Dim StartRow As Long



    For Each ws In ActiveWorkbook.Worksheets
        With ws.Select
            LastRow = ws.Range("G" & Rows.Count).End(xlUp).Row

            Set StartDate = Cells.Find(What:="Jul-17", After:=ws.Range("A1"), LookIn:=xlValues _
                        , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            StartCol = StartDate.Column
            StartRow = StartDate.Row

                For irow = StartRow To LastRow
                    Set Rng = ws.Range(Cells(irow, StartCol), Cells(irow, StartCol + 11))
                        For Each Cell In Rng
                            Cell.Value = DateAdd("yyyy", 1, Cell)
                        Next Cell

                    Rng.HorizontalAlignment = xlRight
                    Rng.NumberFormat = "mmm-yy"

                    irow = irow + 2
                Next irow

                For jrow = StartRow To LastRow
                    Set Rng = ws.Range(Cells(jrow, StartCol + 12), Cells(jrow, StartCol + 12))
                        For Each Cell In Rng
                            Cell.Value = "FY19 Total"
                        Next Cell
                    jrow = jrow + 2
                Next jrow
        End With
    Next ws


End Sub

Есть идеи?

10000