2016-09-15 4 views
0

У меня есть столбец A с данными до A300.Excel vba Автозаполнение только пустых ячеек

В этом диапазоне некоторые из этих ячеек являются пустыми, некоторые содержат значения.

В VBA, я установил формулу ячейки А1 затем использовать функцию автозаполнения, чтобы установить все это по моей колонке (до А300), как это:

ws.Range("A1").Select 
Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1)) 

Моя проблема заключается в том, что Данные содержат в некоторые клетки тоже стираются! Я пытаюсь автозаполнить, как это, но только через ячейки пустот.

Я пытался добавить фильтр на моем листе, как это:

ws.Range("$A$1:$A$300").AutoFilter Field:=1, Criteria1:="=" 

Тогда я повторно функцию автозаполнения, но мне кажется, чтобы заполнить thourght отфильтрованных клеток ...

мы не можем добавить к функции автозаполнения параметр «только пустые ячейки»? Что-то вроде этого:

Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1)), Criteria1:="=" 

Спасибо за ваши ответы!

+1

Что вы пытаетесь их заполнить? Статические или прогрессивные значения? См. [Метод Range.SpecialCells] (https://msdn.microsoft.com/en-us/library/office/ff196157.aspx) с ** xlCellTypeBlanks **. – Jeeped

+0

У меня есть другая проблема с «SpecialCells (xlCellTypeBlanks)». Это приводит к тому, что если копия затем вставляет пустую ячейку, эта ячейка больше не считается пустой ячейкой, и она не выбрана этим кодом (но эта ячейка все еще пуста), это уже известная проблема SpecialCells (xlCellTypeBlanks). Поэтому я могу получить ошибку «Нет сотовой связи», даже если у меня есть пустая ячейка. Знаете ли вы какое-либо решение этой проблемы? –

ответ

1

Извиняюсь, я скучаю понимаемый вас вопрос - Хотите, чтобы заполнить все пустые ячейки со значением в A1? - здесь вы найдете:

Sub Replace() 

If Trim(Range("A1").Value) = "" Then 
    MsgBox "There's no value in A1 to copy so there's nothing to copy to all blank cells", vbInformation, "Nothing in A1" 
    Exit Sub 
    Else 
     Range("A1:A300").SpecialCells(xlCellTypeBlanks).Select 
     Selection.Value = Range("A1").Value 
End If 

End Sub 
+0

Спасибо, это проще ответить! –

+0

У меня есть другая проблема с «SpecialCells (xlCellTypeBlanks)». Это приводит к тому, что если копия затем вставляет пустую ячейку, эта ячейка больше не считается пустой ячейкой, и она не выбрана этим кодом (но эта ячейка все еще пуста), это уже известная проблема SpecialCells (xlCellTypeBlanks). Поэтому я могу получить ошибку «Нет сотовой связи», даже если у меня есть пустая ячейка. Знаете ли вы какое-либо решение этой проблемы? –

+0

Не совсем уверен, в чем проблема. Первая строка находит все пустые ячейки и их выбирает, вторая вводит значение в A1 в выбранные ячейки, поэтому не может быть .. если у вас нет ячеек с пробелом в них (""), который не считается пустым - это то, что происходит? – Jeremy

2

Предполагая, что вам нужны статические значения, я бы использовал цикл. Один ниже будет заполнить все пустые клетки с кормы:

Sub AllFillerNoKiller() 
Dim ws As Worksheet 
Set ws = Worksheets("Sheet1") 

For Each c In ws.Range("A1:A300") 
    If c.Value = "" Then c.Value = "poop" 
Next 
End Sub 
+0

Спасибо, ваш код работает для диапазона A1: A300, но я использовал в качестве примера, у моей реальной книги будет более 10 тыс. Строк, и я бы избегал цикла. Но спасибо за вашу помощь! –

3

с данными, такими как:

enter image description here

Я хотел бы сделать одну копию, а не заполняющего вниз:

Sub luxation() 
    Range("A1").Formula = "=ROW()" 
    Dim rDest As Range 
    Set rDest = Intersect(ActiveSheet.UsedRange, Range("A1:A300").Cells.SpecialCells(xlCellTypeBlanks)) 

    Range("A1").Copy rDest 
End Sub 

с этим результатом:

enter image description here

Примечание:

Формулы регулировки после копирования.

EDIT # 1:

Пожалуйста, обратите внимание, что есть некоторые обстоятельства, при которых этот код не будет работать. Возможно, что UsedRange не распространяется на ячейку A300.

Например, если таблица полностью разряжена для формулы в A1 и некоторое значение в A3 исключением. В этом случае Rdest будет включать только одну ячейку A2. Код будет оставлен A4 до A300 нетронутый.

+0

Спасибо за этот ответ, это то, что мне нужно. Для «usedRange» у меня уже возникла проблема с этим. Кажется, он не пересчитывает, когда вы удаляете некоторые данные или другие, но я могу это без использования usedrange. Еще раз спасибо ! –

+0

У меня есть другая проблема с «SpecialCells (xlCellTypeBlanks)». Это приводит к тому, что если копия затем вставляет пустую ячейку, эта ячейка больше не считается пустой ячейкой, и она не выбрана этим кодом (но эта ячейка все еще пуста), это уже известная проблема SpecialCells (xlCellTypeBlanks). Поэтому я могу получить ошибку «Нет сотовой связи», даже если у меня есть пустая ячейка. Знаете ли вы какое-либо решение этой проблемы? –

1

Вы также можете использовать ниже код:

stAddress = Sheet1.Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks).Address 
Sheet1.Range(st).Value = "Empty" 
+0

Спасибо, этот код работает, даже если он более сложный, чем ответ Джереми. Спасибо, btw! –

+0

У меня есть другая проблема с «SpecialCells (xlCellTypeBlanks)». Это приводит к тому, что если копия затем вставляет пустую ячейку, эта ячейка больше не считается пустой ячейкой, и она не выбрана этим кодом (но эта ячейка все еще пуста), это уже известная проблема SpecialCells (xlCellTypeBlanks). Поэтому я могу получить ошибку «Нет сотовой связи», даже если у меня есть пустая ячейка. Знаете ли вы какое-либо решение этой проблемы? –