Форматирование ячеек в цикле выбора - PullRequest
0 голосов
/ 14 ноября 2018

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

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

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"

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

Scott


**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 ]

0 голосов
/ 14 ноября 2018

ССЫЛКА ИЗОБРАЖЕНИЯ

Так выглядит лист.В основном я использую поиск / выбор, а затем в подсвеченных ячейках я запускаю свой макрос.Я сознательно делаю этот лист за раз, так как есть некоторые исключения.Макрос заполняет соседние ячейки с помощью функции 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) .Hor HorizontalAlignment = xlRight.NumberFormat = "ммм-гг"

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
0 голосов
/ 15 ноября 2018

Вернемся назад, поэтому, если в @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
0 голосов
/ 14 ноября 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...