Preenchendo espaços vazios em uma coluna com uma série no Microsoft Excel

3

Eu tenho uma lista como esta:

    A               B
Student ID     Student Name

20496836       Barnes, Troy
28682693       Bennett, Shirley
               Edison, Annie
28395839       Hawthorne, Pierce
               Perry, Britta
               Nadir, Abed
23234242       Winger, Jeff

Eu preciso atribuir os IDs dos alunos em sequência aos que não os têm, começando com 90000000. Em outras palavras:

    A               B
Student ID     Student Name

20496836       Barnes, Troy
28682693       Bennett, Shirley
90000000       Edison, Annie
28395839       Hawthorne, Pierce
90000001       Perry, Britta
90000002       Nadir, Abed
23234242       Winger, Jeff

Eu tenho cerca de 1000 deles para preencher, então eu preciso encontrar uma maneira de fazer isso de uma só vez.

    
por Jarrett G. 21.08.2013 / 18:53

3 respostas

9

Para fazer isso em um "swoop", você pode selecionar a coluna onde você precisa adicionar os números (para este exemplo, selecione A2 a A8).

Em seguida, pressione Ctrl + G e selecione Especial ... > "Blanks" > OK.

Pressione = (sem tocar em mais nada) e cole isto:

90000000+COUNTIF($A$2:A3,">="&90000000)

Agora, NÃO pressione Enter mas pressione Ctrl + Digite . Depois disso, você deve estar pronto, mas para evitar acidentes, copie e cole os valores na coluna A para que os resultados não possam ser alterados novamente.

    
por 21.08.2013 / 19:21
3

Não sei como fazer isso usando o VBA, mas você pode fazer isso por:

  1. defina a coluna C como 0 ou 1, dependendo de o valor da coluna A estar em branco ( =if(A2="", 1, 0) )
  2. defina a coluna D como a ID usando uma fórmula como ( =if(A2="", 90000000+sum($A$2:A2)-1, A2) )

Não testado. . .

    
por 21.08.2013 / 19:02
0

(Resposta editada de 8/21:)

Para fazer no VBA, insira este código em uma macro. A chave é o método .filldown.

Isso pressupõe que a última linha na sua planilha pode ser encontrada na coluna B, e não há lacunas na B. Ela também assume que a segunda linha está em branco para separar o cabeçalho do restante dos dados como mostrado acima .

'last_row is based on the last name in column B, ignoring the first 2 rows,
'and will be the point at which this macro stops as it works from the top
'down.
'next_row is a look-ahead to see what row needs to be acted on next, as
'the macro progresses, so fills in student IDs in the appropriate spaces
Dim last_row As Long, next_row As Long
last_row = ActiveSheet.Range("B3").End(xlDown).Row

'student_id is the student ID, starting at 90000000
Dim student_id As Long
student_id = 90000000

Cells(3, 1).Select 'starting point in column A, ignoring the first 2 rows

'the meat & potatoes
Do While Selection.Row < last_row
  'if there is a space after the current row, fill in student_id
  If Selection.Row <> Selection.End(xlDown).Row - 1 Then
    'find the next row to advance to before changing anything
    next_row = Selection.End(xlDown).Row
    'put in the student ID >= 90000000 in the space after the
    'current row
    Selection.Offset(1).Value = student_id
    'fill in that student ID in all blank space(s)
    Range(Selection.Offset(1), Selection.End(xlDown).Offset(-1)).FillDown
    'add 1 to the student ID
    student_id = student_id + 1
    Cells(next_row, 1).Select
  Else
  'if no space after current row, progress 1 row
    Selection.Offset(1).Select
  End If
Loop
    
por 21.08.2013 / 20:26