2016-01-25 13 views
0

У меня есть требование для автоматического заполнения строки уникальным номером, начиная с некоторого значения (скажем 1000).Excel VBA: Автоматическое создание уникального номера для каждой строки

  • Лист имеет 2 колонки.

  • Когда я заполняю значение во втором столбце в каждой строке, первый столбец должен быть заполнен автоматически.

  • Я заполнил 3 ряда (1000,1001,1002).

  • Теперь, если я удалить средний ряд, который имеет автогенерируемое значение как 1001, строка, которая была первоначально с значением 1002 получает автоматически обновляется до 1001.

  • Но согласно моему требованию значения должно оставаться уникальный (он должен оставаться равным 1002).

Формула, что я использовал это:

=IF(B2<>"",COUNTA($B$2:B2)+999,"") 

My Excel, как это перед удалением значения:

Test_Case_Id Name 
1000    a 
1001    b 
1002    c 

После удаления средней строки она становится:

Test_Case_Id Name 
1000    a 
1001    c 

Ожидаемый результат:

Test_Case_Id Name 
1000    a 
1002    c 

Пожалуйста, помогите мне в этом.

Спасибо, Vevek

+1

После заполнения листа, изменить формулу в значениях, то удаление не повлияет – vels4j

ответ

2

Вы отметили VBA, но вы не используете VBA. Формулы, которые подсчитывают строки или используют номер текущей строки, всегда будут обновляться, когда лист пересчитывается.

Для достижения того, что вы описали, вам действительно нужен VBA. Это должно привести к простому событию изменения листа. Думайте вдоль линий

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim maxNumber 
If Not Intersect(Target, Range("B:B")) Is Nothing Then 
' don't run when more than one row is changed 
    If Target.Rows.Count > 1 Then Exit Sub 
' if column A in the current row has a value, don't run 
    If Cells(Target.Row, 1) > 0 Then Exit Sub 
' get the highest number in column A, then add 1 and write to the 
' current row, column A 
    maxNumber = Application.WorksheetFunction.Max(Range("A:A")) 
    Target.Offset(0, -1) = maxNumber + 1 
End If 
End Sub 

Скопируйте код, щелкните правой кнопкой мыши вкладку листа, выберите «Просмотр кода» и вставить в окно кода.

Вот скриншот до и после удаления строки с ID 1002:

enter image description here

+0

С этим VBA только автоматическое увеличение работает отлично. Он не отвечает требованию иметь такое же значение после удаления пронумерованного значения счетчика строк. – Vevek

+0

Что это значит? Если строка удалена, оставшиеся номера остаются на месте и не корректируются. Это то, что вы показываете в своем «ожидаемом результате» в вопросе. – teylyn

+0

Я добавил скриншот. Скажите, пожалуйста, что не работает в соответствии с требованиями. – teylyn

0
Sub abc() 
Dim a As Integer 
Dim b As Integer 
Dim i As Integer 
Dim z As Integer 

i = 1 
Set sh = ThisWorkbook.Sheets("Sheet1") 'instead of sheet1 you can add name of your sheet 
Dim k As Long 
k = 2 
Set rn = sh.UsedRange 
k = rn.Rows.Count 

Cells(1, 1).Value = 1001 


Do Until i = k 

b = (Cells(i, 1).Value) 
a = b + 1 
i = i + 1 

Cells(i, 1).Value = a 

Loop 
End Sub 

Не уверен, что если вам нужен макрос. Вы можете добавить этот макрос в свой файл. Даже после того, как вы удалите ячейку, как только вы запустите макрос, текущее значение ячейки будет значением вышеуказанной ячейки плюс один, поэтому все будет по ряду. Спасибо

+0

Есть ли у вашей клавиатуры ключи ',' (запятая) и '.' (точка или полная остановка)? Если да, почему бы вам не использовать их? Пунктуация была изобретена, чтобы сделать письменное сообщение понятным. Он сообщает вашим читателям, где заканчивается предложение или где нужно вставить паузу.Опущение пунктуации делает текст, который трудно понять. Ваше объяснение - беспорядок. – teylyn

+0

sorry @teylyn Спасибо за ваш отзыв –

+0

Я удалил свой нижний план. – teylyn

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