2013-12-07 4 views
2

Я хочу, чтобы заполнить все пустые клетки, используя значения из указанных клетокЗаполнение пустых ячеек со значением выше

state name 
IL  Mike 
     Sam 
CA  Kate 
     Bill 
     Leah 

Должно быть следующим

state name 
    IL  Mike 
    IL  Sam 
    CA  Kate 
    CA  Bill 
    CA  Leah 

Я попытался следующий

Sub split() 
Dim columnValues As Range, i As Long 

Set columnValues = Selection.Area 

Set i = 1 
For i = 1 To columnValues.Rows.Count 
    If (columnValues(i) = "") Then 
    columnValues(i) = columnValues(i - 1) 
    End If 
Next 

End Sub 

Я получаю сообщение об ошибке, когда устанавливаю i. Как я могу изменить свой код

+3

Когда Установить переменными значения меня тоже путают. Когда вы определяете переменные, чтобы содержать строки или числа, вам НЕ нужно «устанавливать» их (например, 'i = 10'). Когда вы определяете переменные, которые содержат/ссылаются на объекты, такие как диапазоны и рабочие листы, вам нужно« установить » (например, 'Set columnValues ​​= Range (" A: G ")' или 'Set wkb = Activeworkbook'). –

ответ

2

Это потому, что i должно быть определено как i=1. Есть еще несколько проблем с кодом. Я хотел бы изменить его на что-то вроде этого:

Sub split() 
    Dim columnValues As Range, i As Long 

    Set columnValues = Selection 

    For i = 1 To columnValues.Rows.Count 
     If columnValues.Cells(i, 1).Value = "" Then 
      columnValues.Cells(i, 1).Value = columnValues.Cells(i - 1, 1).Value 
     End If 
    Next 
End Sub 
+0

Обратите внимание, что оператор 'i = 1' в любом случае является полностью избыточным, потому что самый следующий оператор:' For i = 1 To columnValues.Rows.Count', и первое, что делает этот оператор, присваивает значение 1 'i'. – YowE3K

14

Для тех, кто не требует VBA для этого выберите Columna, Go To Special ... Пробелы и =, Up и Ctrl +Введите должен дают тот же результат.

+1

+1 для эффективного ответа. – brettdj

+1

+ 1 Красиво сделано :) –

6

Учитывая вы просили VBA, есть более быстрый способ, чем цикл (в VBA эквивалента того, что pnuts поставленных выше, с дополнительным шагом удаления формулы в конце):

On Error Resume Next 
With Selection.SpecialCells(xlCellTypeBlanks) 
.FormulaR1C1 = "=R[-1]C" 
.Value = .Value 
End With 
+1

+1 - «Использование VBA» даже в заголовке (даже если в качестве тега это не должно быть)! – pnuts

+0

+ 1 еще один хороший –

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