Цикл VBA до последнего столбца и увеличение значения в столбце на 1

#excel #vba

#excel #vba

Вопрос:

Я работаю над проектом, в котором мне нужно заполнить заголовки столбцов инкрементными значениями (увеличенными на 1) до последнего столбца.

Код работает нормально, но значение в заголовках столбцов НЕ увеличивается на 1. Он просто берет исходное значение и помещает его по всем столбцам.

Не могли бы вы мне помочь?

Мой код до сих пор:

 Sub LastColumn_PopulateHeadings()

'Declare variable for Last row (Prior FY)
Dim LastColumn As Integer
Dim i As Integer


'Find the last Column used

LastColumn = Range("XFD4").End(xlToLeft).Column

'populate headings with column values UNTIL LAST COLUMN

' Loop to populate the heading until LAST column

i = 8

Do While i < LastColumn
'MsgBox (LastColumn)
    
    Cells(4, i).Value = Cells(4, i).Value   1
    i = i   1
Loop

End Sub
  

Комментарии:

1. Код работает для меня. = Do While Также используйте условие для последнего столбца Do While i <= LastColumn .

2. Спасибо!!! Цикл работает нормально. Моя проблема заключается в увеличении значения в столбцах. Я хочу иметь 1 в столбце 1, затем 2 и 1, затем 3 и 3 и так далее. Есть мысли, как это сделать?

Ответ №1:

Я нахожу ваш код немного странным, но, вероятно, я что-то упускаю. В любом случае это должно работать:

 Sub LastColumn_PopulateHeadings()

'Declare variable for Last row (Prior FY)
Dim LastColumn As Integer
Dim i As Integer
Dim IntCounter01 As Integer '<<<<<<ADDED LINE (1 of 3)


'Find the last Column used

LastColumn = Range("XFD4").End(xlToLeft).Column

'populate headings with column values UNTIL LAST COLUMN

' Loop to populate the heading until LAST column

i = 8
IntCounter01 = 1 '<<<<<<ADDED LINE (2 of 3)

Do While i < LastColumn
'MsgBox (LastColumn)
    
    Cells(4, i).Value = IntCounter01
    i = i   1
     IntCounter01 = IntCounter01   1 '<<<<<<ADDED LINE (3 of 3)
Loop

End Sub
  

Я взял ваш код и добавил 3 строки. Вы также можете использовать цикл For-Next вместо цикла Do-While-Loop, поскольку вы уже знаете свое максимальное значение. Что-то вроде:

 For i = i To LastColumn - 1

    Cells(4, i).Value = IntCounter01
    IntCounter01 = IntCounter01   1
    
Next
  

Вы также можете использовать формулу для покрытия вашего диапазона вместо выбора каждой ячейки по одному. Вот так:

 Sub LastColumn_PopulateHeadings()
    
    'Declarations.
    Dim IntFirstColumn As Integer
    Dim IntLastColumn As Integer
    Dim IntRow As Integer
    Dim IntFirstValue
    Dim RngRange01 As Range
    
    'Setting variables.
    IntFirstValue = 1
    IntRow = 4
    IntFirstColumn = 8
    IntLastColumn = Range("XFD4").End(xlToLeft).Column
    
    'Setting first value in the first cell.
    Cells(IntRow, IntFirstColumn).Value = IntFirstValue
    
    'Setting RngRange01.
    Set RngRange01 = Range(Cells(IntRow, IntFirstColumn   1), Cells(IntRow, IntLastColumn - 1))
    
    'Setting formulas in RngRange01.
    RngRange01.FormulaR1C1 = "=RC[-1] 1"
    
    'Copy-pasting the values in RngRange01.
    RngRange01.Value = RngRange01.Value
    
End Sub
  

Комментарии:

1. Приятно!!! Теперь он работает правильно, и значение увеличивается в каждом столбце. Я действительно ценю это.

2. Рад узнать. Затем вы можете пометить ответ как принятый.

3. Еще раз спасибо!!! Я пометил ваш ответ как принятый. Хорошего дня 🙂