Автоматическое заполнение поля идентификатора новой строки

В Excel есть ли способ автоматически заполнять / увеличивать столбец при заполнении столбца в той же строке? Например, скажем, у меня есть столбец идентификатора и имени. Когда я заполняю столбец имени для новой строки, я хочу, чтобы столбец идентификатора в той же строке автоматически заполнялся следующим номером (то есть предыдущим идентификатором + 1). Я не хочу копировать формулу или каким-либо образом касаться этого поля идентификатора.

Это возможно?

Спасибо Стивен

2 ответа
2

По волшебству? Нет такого в Excel или любой другой таблице.

=IF(AND(A1<>"";B2<>"");A1+1;"") <- Введите в A2 и "заполните"

например, Скопируйте A2 (т.е. поместите курсор в A2, CTRL+C), потом…

Вставить, CTRL+Vна любое количество строк в столбце A.

Введите значение в A1, введите что-нибудь в B1 — первая строка.
Затем введите что-нибудь в B2, B3, B4 …


В крайнем случае будут ВСЕ строки, что может замедлить работу вашей таблицы.

это действительно быстро делается:

Excel:

ударить Конец, держать СДВИГ, ударить Курсор вниз, отпустить СДВИГ,
CTRL+V, Конец, Курсор вверх

LibreOffice:

держать СДВИГ и CTRL, ударить Курсор вниз, отпустить
CTRL+V, держать CTRL, ударить Курсор вверх

… и у вас есть формула во всех ячейках столбца A, кроме A1.

  • 1

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

    — Мате Юхас
    2 августа в 19:45

  • Пожалуйста, примите это не буквально, а как способ передать идею.

    — Ханну
    2 августа в 20:04

  • @ MátéJuhász — Факты: в LibreOffice 6.4.x заполнение занимает менее двух секунд, то есть в 1 048 576 ячеек. Нет заметных задержек при заполнении текста в столбце B. Это на компьютере на базе i7-4770. может оказаться, что электронные таблицы более эффективны для вычислений, чем вы ожидаете.

    — Ханну
    3 августа в 16:26

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

    — Мате Юхас
    3 августа в 16:58

  • … и мы вернулись к основам. Вышеупомянутое предназначено для демонстрации функции, а не для того, чтобы подразумевать, что вы ДОЛЖНЫ использовать ее именно так. Если не что-то еще, то вы действительно что-то узнали или осознали. И еще кое-что … эти строки также дают представление.

    — Ханну
    7 августа в 5:00

Если вам удобно использовать VBA, приведенный ниже код является хорошей отправной точкой. Его следует вставить в объект рабочего листа, где вы хотите разместить это поле идентификатора. Это не идеально, и вы должны попытаться понять его, прежде чем копировать / вставить, чтобы убедиться, что он сработает для вас. Он отслеживает изменения в определенном столбце. Каждый раз, когда что-то в этом столбце изменяется, выполняется проверка другой ячейки в той же строке. Если эта другая ячейка пуста, она заполняет ее максимальным значением в этом другом столбце плюс один. Это создает числовой уникальный идентификатор в определенном столбце.

Private Sub Worksheet_Change(ByVal Target As Range)
    
    ' Setup the columns you care about here
    Const nameColumnLetter = "D"
    Const idColumnLetter = "A"
    
    ' Declare some variables for easier reference later
    ' This is not necessary but it makes the code in the next section easier to follow
    Dim idCell As Range
    Dim idColumn As Range
    Dim nameColumn As Range
    Set idCell = Range(idColumnLetter & Target.Row)
    Set idColumn = Range(idColumnLetter & ":" & idColumnLetter)
    Set nameColumn = Range(nameColumnLetter & ":" & nameColumnLetter)
    
    ' Check if the changed cell is in the Name column
    If Not Intersect(Target, nameColumn) Is Nothing Then
        ' Check if the ID column is blank
        If Len(idCell.Value) = 0 Then
            ' Set the ID value to the max of that column plus one
            idCell.Value = Application.WorksheetFunction.Max(idColumn) + 1
        End If
    End If
    
End Sub

Как добавить VBA в MS Office?

  • Мой ранний опыт работы с заимствованным кодом, содержащим Worksheet_Change() и другие блокируют Excel; заставил меня избегать их как чумы. С их помощью легко создать код с бесконечным циклом.

    — Ханну
    3 августа в 16:09

  • @Hannu Это вполне возможно, если Worksheet_Change() событие содержит код, который изменяет рабочий лист. Однако способ написания этого кода: он вносит изменения в столбец A тогда и только тогда, когда произошло изменение в столбце D, поэтому он не сработает сам.

    — Инженер Тост
    3 августа в 17:20

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *