#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. Еще раз спасибо!!! Я пометил ваш ответ как принятый. Хорошего дня 🙂