2014-12-11 2 views
0

Мои записи начинаются в ячейке B8, и мне нужно их пересчитать в столбце A, начиная с ячейки A8.Автозаполнение с одной записью [Excel-VBA]

Я использовал ответ из этого вопроса «autofill down according to adjacent column», но как мне обрабатывать, когда показатель записи равен 0 или 1? Когда есть 1 запись, это ошибки. Кажется, автозаполнение невозможно автозаполнять одну ячейку.

У меня есть условия для тестирования нуля и одного, но есть ли более чистый способ сделать это?

LastRow = Cells(Rows.Count, 2).End(xlUp).Row 'Find last row   

If LastRow >= 8 Then       'If recordcount is 1 or greater 
    Range("A8").FormulaR1C1 = "1"    'First number is "1" 
     If Not LastRow = 8 Then     'If not recordcount exactly 1 
      'Enumerate the remaining records with Autofill 
      Range("A8").AutoFill Destination:=Range("A8:A" & LastRow), Type:=xlLinearTrend  
     End If 
End If 

ответ

1

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

ПРОВЕРЕНО

Sub AutoFiller() 

Dim LastRow As Long 
    LastRow = Cells(Rows.Count, "B").End(xlUp).row 'Find last row 

    Sheets("Sheet1").Cells(8, 1) = 1    'First number is "1" 
    Range("A8").AutoFill Destination:=Range("A8:A" & LastRow), Type:=xlLinearTrend    
End Sub 

Использование LOOP вместо автозаполнения:

Sub VBAAutoFill() 

Dim LastRow As Long 
Dim count As Long 

    LastRow = Cells(Rows.Count, 2).End(xlUp).Row 
    count = 1 

    For lRow = 8 to LastRow 
     Sheets("Sheet1").Cells(lRow, 1) = count 
     count = count + 1 
    Next lRow 
end Sub 

EXCEL ФУНКЦИЯ: подсчитывать все записи, если вы просто хотите знать, сколько есть общая ..

COUNTA(B8:B10000) 

Редактирование заметок: разработка процесса в заметках, исправление опечаток. Исходное редактирование добавленных решений.

1

My records start in cell B8, and I need to count them in Column A, starting in cell A8.

Я принимаю это означает, что вы, по сути перечисления строк. Это должно быть полезно для решения ваших проблем ошибок, и если это не совсем то, что вы хотите в A колонки, оно не должно быть трудно для вас, чтобы сделать корректировку:

Public Sub GetRangeCount() 

    Dim bRange As Range 
    Set bRange = Range(Range("B8"), Range("B1048575").End(xlUp)) 

    Dim i As Integer 
    i = 0 

    For Each c In bRange 

     If c.Value <> "" Then 
      i = i + 1 
      c.Offset(0, -1).Value = i 
     End If 

    Next 

End Sub 
+1

Это будет работать. Жесткое кодирование 1048575 для последней строки B может быть плохой идеей, если люди с немного более старыми версиями Excel используют формулу. – peege

+0

Вы правы. Ваш пример лучше для более широкого использования. Я мог бы изменить мой, но тогда единственное реальное различие между нашими ответами было бы «For' vs« For Every »и что мой пример пропускает перечисление, когда он встречает пустую ячейку ..., которую я даже не уверен, что OP хочет/потребности. – wahwahwah

+0

Оставьте свое и пусть OP выбрать, и пусть будущие читатели найдут значение в вариациях. Неважно, кто получает кредит, так как мы оба это делали одновременно. Кроме того, в будущем появятся люди, которым понадобится то, что вы сделали немного другим способом, подобно тому, как OP изменил чужой ответ в другом месте. Kudos .. Хотя, я бы изменил LastRow, по причинам, ваш ответ по-прежнему отличается и действителен. Использование для каждого и смещение и пропуски любых пробелов (приятное добавление) – peege