2013-06-18 3 views
-1

У меня есть два столбца данных, A и B. Я хочу найти пустые ячейки в столбце B, а затем скопировать данные из соответствующей ячейки в столбце A, если A также не пуст.Макро Найти пустые ячейки и заменить

+1

Будут ли какие-либо проблемы, если вы скопировали пустую ячейку из 'A' в пустую ячейку в' B'? – user2140261

+0

no - я просто не хочу перезаписывать контент в B, если он уже существует – user2497437

ответ

0

Я бы использовать SpecialCells:

Sub fillblanks() 
Dim rngBlanks As Range 
Dim rng As Range 
Dim cl As Range 

Set rng = ActiveSheet.UsedRange.Columns(2) 
Set rngBlanks = rng.SpecialCells(xlCellTypeBlanks) 
For Each cl In rngBlanks.Cells 
    With cl 
     If (.Value = "") And (.Offset(0, -1).Value <> "") Then 
      .Value = .Offset(0, -1).Value 
     End If 
    End With 
Next 

End Sub 
+1

Забавно, играя с моим ответом против вашего, я решил, что проверю ваш код, также удалив строку, которая проверяет пробел в смещении. Это на самом деле замедлил ваш юнит почти на 33%. Имеет смысл, потому что проверка выполняется намного быстрее, чем модификация ячейки. Но я не понимал, что это замедлит его на 33%. Не уверен, знаете ли вы, что это было бы быстрее, когда вы написали бы это, или вы просто следуете инструкциям Аскерса, но я нашел это интересным. Я загружу образец учебника, если вы заинтересованы в том, чтобы играть с ним. – user2140261

+0

Я предварительно загрузил образец книги [здесь] (http://www.mediafire.com/download/b8sxpkgvsizak60/Book1.xlsm). – user2140261

+0

Я просто следил за рекомендациями, даже не думая о производительности, но это имеет смысл - любое изменение объектов рабочего листа занимает много времени. –

1
Sub Sample2() 

On Error Resume Next 

With Columns("B").SpecialCells(xlCellTypeBlanks) 
    .FormulaR1C1 = "=RC[-1]" 
    .Value = .Value 
End With 

End Sub 

Это не делает так, как вы спросите, как если бы не пропустить пустую ячейку, если ячейка А является пустым, Это потому, что я не чтобы понять, почему замена и пустой пробел будет проблемой. если есть очень простое исправление, просто изменяя .FormulaR1C1 = "=RC[-1]", чтобы принять во внимание пробелы.

1

Нет необходимости в VBA. Выберите ColumnB, ДОМОЙ> Редактирование, Найти & Выбрать, Go To Special ... Выбрать Пробелы (только),

= 

, Ctrl +Введите.

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