В общем, задача такая. Есть форма с одним textbox и кнопкой ок. При нажатии на кнопку нужно чтобы происходил цикл: если ячейка в столбце A не пустая, то в ячейке столбца U должно записаться значение из textbox, увеличенное на 1, в следующей ячейке на 2 и т.д.
Код
Private Sub CommandButton1_Click()
per = UserForm1.TextBox1.Value
For n = 2 To i
If IsEmpty(Cells(n, 1)) = False Then
per = per + 1
Cells(n, 21).Value = per
Else
Exit For
End If
Next n
End Sub
Подскажите, как это правильно оформить, пожалуйста.
Private Sub CommandButton1_Click()
per = UserForm1.TextBox1.Value
For n = 2 To i
If IsEmpty(Cells(n, 1)) = False Then
per = per + 1
Cells(n, 21).Value = per
Else
Exit For
End If
Next n
End Sub
kamlayka, сделайте это (оформление кода) в стартовом сообщении. По вопросу: где у Вас присваивается значение переменной i? И обратите внимание на принудительный выход из цикла )
Юрий М, ммм, а можете подсказать? Во-первых, я не знаю, чему должно равняться значение i (по идее количеству не пустых ячеек в столбце А). Как вообще сделать цикл, который прерывается, если в ячейке (Cells(n, 1)) будет пусто?
Александр, можете еще немножко помочь? Не знаю, как сравнить первые 6 символов активной ячейки с предыдущей. Мне нужно сделать условие: если у активной ячейки совпадают первые 6 символов с предыдущей, тогда значение во втором столбце тоже берется из ячейки выше. Если нет - тогда Cl.Offset(0, 3).Value = per
Подскажите хотя бы функции, а то не знаю, куда двигаться. Пример, как должно быть подкрепляю
Александр, вы не совсем правильно меня поняли. Но на основе вашего макроса я сумела поправить свой. У меня остался только один вопрос, я не совсем понимаю действие Rng.Columns(1).SpecialCells(2). Rng.Columns(1) - это наш столбец А, а SpecialCells(2) - вторая ячейка что ли??
Код
Private Sub CommandButton1_Click()
Dim Cl As Range, Cl1 As Range, Rng As Range, per As Long
Application.ScreenUpdating = False
per = UserForm1.TextBox1.Value
Set Rng = ActiveSheet.UsedRange
For Each Cl In Rng.Columns(1).SpecialCells(2)
per = per + 1
Cl.Offset(0, 1).Value = per
If Left(Cl, 6) = LastCl Then
Cl.Offset(0, 4).Value = Cl.Offset(-1, 4).Value
Else
Cl.Offset(0, 4).Value = per
LastCl = Left(Cl, 6)
End If
Next
Application.ScreenUpdating = True
Unload Me
End Sub
kamlayka. Есть действительно трюки и секреты, которые не отражаются в инструкциях и документации, но на 99% подобных вопросов ответит сайт производителя Range.SpecialCells Method (Excel)