#excel #vba
Вопрос:
Я новичок в vba, и я борюсь с этой маленькой проблемой. Хотя я не нашел никаких сообщений, посвященных этой проблеме.
вот в чем дело:
Я хотел бы заполнить каждую ячейку доски рядом данных с определенным значением. Допустим , у меня уже есть диапазон данных в столбце A, я бы хотел, чтобы в том же столбце строка после последней ячейки, заполненной значениями «a» (которые могут варьироваться), заполняла следующие пустые ячейки определенным значением ( «b»).
Вот пример того, что я хотел бы сделать в качестве конечного результата;
колонка А |
---|
a |
a |
a |
a |
a |
a |
b |
b |
b |
b |
b |
Я попытался закодировать его, но как только я запустил его, ничего не произошло, ничего не изменилось. Вот он ;
Sub test()
Dim firstlineb As Long
Dim lastlineEmpty As Long
Dim x As Integer
firstlineb = Worksheets("Sheets1").Range("A2",Range("A2").End(xlDown)).End(xlDown).Offset(1)
lastlineEmpty = Worksheets("Sheets1").Range("A2",Range("A2").End(xlDown)).End(xlDown).Offset(1).End(xlDown)
For x = firstlineb To lastlineEmpty
Cells(x, 1).Value = "b"
Next x
End Sub
Я был бы очень признателен вам за помощь. Большое вам спасибо !
Комментарии:
1. Поскольку это связано с VBA и, следовательно, не является услугой «код для вас», а сайтом для совместной работы для решения вашей конкретной проблемы с кодированием, что вы пробовали таким образом ? Пожалуйста, обновите свой пост, чтобы включить существующий код.
2. Привет, Сирил. Извини, я забыл его положить. Здесь вы можете найти вверху мой пост, обновленный моим кодом .
3. «Ничего не происходит» мало о чем говорит. Он компилировался, вы пытались пройти через (F8), чтобы увидеть, где возникла проблема?
4. Вы пытаетесь заполнить все строки 1 м значением
b
? Что определяет, во сколько строкb
будет заполнено? Я постараюсь дать макет чего-то в разделе Ответов, так как там будет легче читать код.
Ответ №1:
Я не знаю, правильно ли я понял вашу проблему, но попробуйте это :
Sub test()
Dim firstlineb As Range
Dim lastlineEmpty As Range
Dim cel As Range
Set firstlineb = Range("A2").End(xlDown).Offset(1)
Set lastlineEmpty = Range(firstlineb, firstlineb.End(xlDown))
For Each cel In lastlineEmpty.Cells
If cel = "" Then
cel.Value = "b"
Else: Exit Sub
End If
Next cel
End Sub
Я думаю, что вы заблудились с «.End(xlDown)», если вы настроили переменную как диапазон, вы можете использовать ее как ячейку :
Range(firstlineb, firstlineb.End(xlDown))
Таким образом, у вас не будет этих повторений :
Range("A2",Range("A2").End(xlDown)).End(xlDown).Offset(1).End(xlDown)
Примечание : Я попробовал vba непосредственно на листе, а не в модуле, поэтому вам придется добавить «Таблицы(«Лист1″)» перед диапазоном.
Я надеюсь, что это вам немного помогло.
Комментарии:
1. Привет, Вадакс, это было именно то, чего я хотел !
2. У меня есть другой запрос по поводу другой проблемы с кодом. Может, мне открыть другой пост? Однако это следует за этим…
3. Откройте еще один и свяжите это в начале своего поста, я думаю.
Ответ №2:
Мы сделаем пару предположений:
Columns(1)
имеет значения, которые вы хотите оценить,a
Columns(2)
имеет метки, чтобы вы могли найти свою последнюю строку для завершения всех записей данных, чтобы вы знали, гдеColumns(1)
данные должны расширяться,b
Мы хотим найти последнюю строку каждого (непроверенную с пояснительными комментариями):
With Sheets(1)
dim lastValueRow as Long
lastValueRow = .Cells(.Rows.Count, 1).End(xlUp).row 'Columns(1) = Columns("A")
dim lastDescriptionRow as Long
lastDescriptionRow = .Cells(.Rows.Count, 2).End(xlUp).row 'Columns(2) = Columns("B")
'Using the above, you can paste a single value over a range, without needing to loop
.Range(.Cells(lastValueRow 1, 1),.Cells(lastDescriptionRow, 1)).Value = "b"
End With
Комментарии:
1. Спасибо тебе за помощь, Кирилл! Это помогло мне решить другую проблему, которую я получил с другим листом, ха-ха.