2017-01-10 17 views
1

ситуация:
На ячейке «A1» У меня есть значение «1»
На Cell «А10» У меня есть значение «2»
На Cell «A20 "у меня есть значение„3“
на сотовом„A30“у меня есть значение„4“Заполните пустые ячейки между двумя заполненными ячейками

то, что я хочу сделать с Excel VBA:
между А1 и А10 есть пустые ячейки. Я хочу, чтобы A2: A9 заполнялся значением A10, что означает «2».
Между A10 и A20 имеются пустые ячейки. Я хочу, чтобы A11: 19 заполнялся значением A20, что означает «3».

Проблема в том, что диапазон от A1 до A30 не фиксирован. Я хочу искать всю строку для ячеек, которые не являются пустыми, и заполнять ячейки между ними верхней заполненной ячейкой.

EDIT:
Чтобы объяснить больше, у меня есть база данных Access с таблицей, заполненной датами, и таблицей, заполненной цифрами.

Я хочу сделать отчет на лист Excel.

Dim Daten As Variant 
Daten = Array(rs!DatumJMinus8Monate, rs!DatumJ, rs!DatumI, rs!DatumH, rs!DatumG, rs!DatumF, rs!DatumE, rs!DatumD, rs!DatumC, rs!DatumB, rs!DatumA, rs!DatumA4Monate) 
Dim Bedarfe As Variant 
Bedarfe = Array(rs!BedarfJ8Monate, rs!BedarfJ, rs!BedarfI, rs!BedarfH, rs!BedarfG, rs!BedarfF, rs!Bedarfe, rs!BedarfD, rs!BedarfC, rs!BedarfB, rs!BedarfA, rs!BedarfA, "") 

Dim neuereintrag As Boolean 
bedarfindex = 0 
For Each element In Daten 
    i = 7 
    For jahre = 1 To 10 
     If Cells(1, i + 1) = Year(element) Then 
      For monate = 1 To 12 
       If Cells(2, i + monate) = Month(element) Then 
        Cells(zeile, i + monate) = Bedarfe(bedarfindex) 
        Cells(zeile, i + monate).Font.Bold = True 
        bedarfindex = bedarfindex + 1 
        neuereintrag = True 
       ElseIf IsEmpty(Cells(zeile, i + monate)) Or neuereintrag = True Then 
        Cells(zeile, i + monate) = Bedarfe(bedarfindex) 
        neuereintrag = False 
       End If 
      Next monate 
     End If 
     i = i + 12 
    Next jahre 
Next element 

На картинке цифры в красных кругах должны быть удалены.

Excel-Report-Sheet Screenshot

+0

Вы сказали, что попробовали много способов, можете ли вы показать некоторые из того, что вы сделали? Это не сайт «Код для меня», но мы поможем вам достичь своей цели, если вы дадите нам что-то для начала! – PartyHatPanda

+0

Измените свой вопрос и добавьте в него свой «код». – ManishChristian

+0

Я сделаю это через несколько минут, нужно некоторое время – oemerkk

ответ

0

На пути к работе снизу вверх:

Sub FillUp() 
    Dim N As Long 
    Dim i As Long 
    N = Cells(Rows.Count, "A").End(xlUp).Row 
    For i = N - 1 To 1 Step -1 
     If Cells(i, 1).Value = "" Then Cells(i, 1).Value = Cells(i + 1, 1).Value 
    Next i 
End Sub 
+0

Эй, это работает очень хорошо! Спасибо! Единственная вещь, я ошибся в описании. Я хотел заполнить ячейки между A1, H1, O1 и так далее. Не колонна, а строка. Я попытаюсь изменить свой код, но я также был бы благодарен вам, если бы вы могли сказать мне, что мне нужно изменить, что он будет работать также со строками? – oemerkk

+1

Спасибо, человек! Я сделал это! Ты мой герой! Это код: 'Sub FillUp() дим N As Long дим я до тех пор, N = Клетки (1, Columns.Count) .END (xlToLeft) .Column Для я = N - 1 к 1 Шаг -1 Если ячейки (1, i) .Value = "" Затем ячейки (1, i) .Value = ячейки (1, i + 1) .Value Next i End Sub' – oemerkk

+0

@oemerkk Good Job !! –

0

Может быть что-то вроде этого. Он нуждается в небольшой работе, поскольку он будет терпеть неудачу, если два значения находятся рядом друг с другом, или столбец 1 не содержит значения.

Sub AutoFill() 

    Dim rCell1 As Range, rCell2 As Range 

    With ThisWorkbook.Worksheets("Sheet1") 
     'Find the last column containing data, set both references to this 
     'so the Do While doesn't fall over on the first loop. 
     Set rCell2 = .Cells(1, .Columns.Count).End(xlToLeft) '1 is the row number it's looking at. 
     Set rCell1 = rCell2 

     'Find next cell to the left containing data and fill between these two columns. 
     Do While rCell1.Column <> 1 
      Set rCell1 = rCell2.End(xlToLeft) 
      .Range(rCell1, rCell2.Offset(, -1)).FillRight 
      Set rCell2 = rCell1 
     Loop 
    End With 

End Sub 

 Смежные вопросы

  • Нет связанных вопросов^_^