У меня есть лист Excel, и столбец A должен автоматически нумероваться в диапазоне от A4 до ~ A50 (зависит от количества клиентов, но обычно это около 41-43, максимум 45), когда я добавляю новую строку.

Например: A4 имеет значение 1, A5 - 2, A6 - 3 и т. Д., Пока A43 не имеет значение 40. Я хочу добавить новую строку где-то посередине, и числа должны измениться соответственно ... Кроме того, число от общего числа клиентов увеличилось, поэтому ячейка A44 теперь будет иметь новый номер 41.

Я поискал в Google и обнаружил, что для этого мне пришлось написать макрос VB (правда ли, что это не может быть решено более простым способом? Excel настолько мощный, но он не может этого сделать?), И он работает несколько. Однако, когда я все же пытаюсь добавить новую строку, она работает некорректно, числа в конце таблицы немного сбиваются с толку, и она не считается правильно:

Excel numeration problem

Он всегда в одной и той же области, число 38 не переключается на 39. К сожалению, мои навыки VB очень ограничены, и они уже были 5 лет назад, когда я последний раз использовал его. Вот сценарий:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim cntClients As Integer
    Dim lastCell As Integer
    Dim startNum As Integer
    Dim startRow As Integer

    cntClients = WorksheetFunction.CountA(Range("A4:A60"))
    lastCell = cntClients + 3
    startNum = 1
    startRow = 4

    Application.EnableEvents = False
    Do While startRow <= cntClients
        Range("A" & startRow).Value = startNum
        startRow = startRow + 1
        startNum = startNum + 1
    Loop
    Range("A" & lastCell) = cntClients
    Application.EnableEvents = True

End Sub

Надеюсь, я ясно изложил свою точку зрения, и если есть более простое решение этой проблемы, которое потенциально не использует макросы, сообщите мне!

Если вам понадобится дополнительная информация, я с радостью их предоставлю!

РЕДАКТИРОВАТЬ: Кроме того, когда я удаляю только что добавленную строку, числа тоже не меняются правильно, как здесь:

Excel problem 2

Как-то макросу не нравится число 39

3
Patrick Manser 4 Янв 2016 в 13:43

3 ответа

Лучший ответ

Вы компенсируете начало в строке 4 с помощью lastCell = cntClients + 3, но никогда не используете компенсированное значение.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim cntClients As Integer
    Dim lastCell As Integer
    Dim startNum As Integer
    Dim startRow As Integer

    cntClients = WorksheetFunction.CountA(Range("A4:A60"))
    lastCell = cntClients + 3
    startNum = 1
    startRow = 4

    Application.EnableEvents = False
    Do While startRow <= lastCell   'cntClients   <~~ this. not that.
        Range("A" & startRow).Value = startNum
        startRow = startRow + 1
        startNum = startNum + 1
    Loop

    Application.EnableEvents = True

End Sub

Я также удалил ненужную строку с той же проблемой.

2
user4039065user4039065 4 Янв 2016 в 10:59

Используйте функцию АГРЕГАТ (excel2010 и выше):

Форма массива AGGREGATE (function_num, options, array, [k])

=AGGREGATE(4,5,$A$1:A1)+1

function_num --   4 (MAX)
options      --   5 (Ignore hidden rows)
0
Avazbek Ismanov 20 Авг 2018 в 07:08

Без VBA:

Если вы превратите свою таблицу данных в TABLE (вы можете использовать метод Insert/Table), вы сможете затем использовать такую ​​формулу, как

A4:  =ROW()-3

И заполнить вниз.

Когда вы впоследствии вставляете или удаляете строки, формула будет распространяться, и числа будут корректироваться правильно.

2
Ron Rosenfeld 4 Янв 2016 в 11:09