заполните каждую пустую ячейку после диапазона данных в одном столбце

#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. Спасибо тебе за помощь, Кирилл! Это помогло мне решить другую проблему, которую я получил с другим листом, ха-ха.