#vba #excel
#vba #excel
Вопрос:
У меня есть две таблицы: «ЗНАЧЕНИЯ» и «ВСТАВИТЬ». В таблице «ВСТАВКА» ячейка «A1» содержит значение, которое необходимо скопировать столько раз, сколько строк > «» в «ЗНАЧЕНИЯХ»
Я пробовал следующий код, но он работает не так, как я предполагал, а копирует значение «A1» 4 раза через каждую строку в «ЗНАЧЕНИЯХ».
Что я делаю не так? Спасибо за вашу помощь!
Sub InsertValuePart()
Dim maxRow As Integer
Dim calcVal As String
Dim x As String
Dim i As Long
Sheets("VALUES").Select
maxRow = Cells(Rows.Count, 1).End(xlUp).row
Sheets("INSERT").Select
Cells(1, 1).Activate
x = Cells(1, 1).Value
Cells(2, 1).Select
For i = 1 To maxRow
Cells(i, 1).Value = x
i = i 1
Next
Application.CutCopyMode = False
Range("A1").Select
End Sub
Ответ №1:
Нет необходимости определять, i
как оно обрабатывается в вашей for
команде. Также for
команда автоматически выполняет итерацию по каждому значению, поэтому использование i = i 1
выдаст вам значения i = 1, 3, 5
. Если вы не включите это, то i = 1,2,3,....,maxRow
. Также calcVal
нигде не использовался, поэтому я от него избавился.
Sub InsertValuePart()
Dim maxRow As Integer
Dim x As String
maxRow = Sheets("VALUES").Cells(Rows.Count, 1).End(xlUp).Row
x = Sheets("INSERT").Cells(1, 1).Value
For i = 1 to maxRow
Sheets("INSERT").Cells(i,1).Value = x
Next
Sheets("INSERT").Range("A1").Select
End Sub
Другой способ сделать это приведен ниже в одной строке:
Sub InsertValuePart()
Sheets("INSERT").Range("A1", "A" amp; CStr(Sheets("VALUES").Cells(Rows.Count, 1).End(xlUp).Row)).Value = Sheets("INSERT").Range("A1").Value
End Sub
Комментарии:
1. Я использовал «Option explicit» и, таким образом, мне пришлось объявить i. Другая переменная предназначалась для последующего действия. Но ваш скрипт работает просто отлично 🙂 Спасибо!