3

У меня есть список, как это:

    A               B
Student ID     Student Name

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

Мне нужно назначить идентификаторы учеников по порядку тем, у которых их нет, начиная с 90000000. Другими словами:

    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

У меня есть около 1000 из них для заполнения, поэтому мне нужно найти способ сделать это одним махом.

3 ответа3

9

Чтобы сделать это одним "махом", вы можете выбрать столбец, в который нужно добавить числа (для этого примера выберите A2 - A8).

Затем нажмите Ctrl+G и выберите Special ... > "Пробелы"> OK.

Нажмите = (ничего не трогая) и вставьте это:

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

Теперь не нажимайте Enter, а нажмите Ctrl+Enter. После этого вам следует начать, но во избежание каких-либо происшествий скопируйте и вставьте значения в столбец A, чтобы результаты не могли быть изменены снова.

3

Я не знаю, как это сделать с помощью VBA, но вы можете сделать это:

  1. установите для столбца C значение 0 или 1 в зависимости от того, является ли значение в столбце A пустым (=if(A2="", 1, 0))
  2. установите столбец D в качестве идентификатора, используя формулу (=if(A2="", 90000000+sum($A$2:A2)-1, A2))

Не проверено. , ,

0

(Ответ отредактирован 21.08 :)

Чтобы сделать в VBA, вставьте этот код в макрос. Ключ - метод .filldown.

Это предполагает, что последняя строка на вашем листе может быть найдена в столбце B, и в ней нет пробелов. Также предполагается, что 2-я строка пуста, чтобы отделить заголовок от остальных данных, как показано выше.

'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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .