Excel VBA UserForm. Добавление порядкового номера строки в итоговую таблицу

Чтобы добавить порядковый номер строки при добавлении данных из UserForm в итоговую таблицу, можно использовать несколько подходов:

1. Использование счетчика строк

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Dim lastRow As Long

    ' Указываем лист, куда добавляем данные
    Set ws = ThisWorkbook.Sheets("ИтоговаяТаблица")

    ' Находим последнюю заполненную строку
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

    ' Добавляем данные с порядковым номером
    ws.Cells(lastRow, 1).Value = lastRow - 1 ' Нумерация с 1 (минус заголовок)
    ws.Cells(lastRow, 2).Value = TextBox1.Value ' Пример для других полей
    ws.Cells(lastRow, 3).Value = TextBox2.Value
    ' ... и так далее для остальных полей

    ' Очищаем форму после добавления
    TextBox1.Value = ""
    TextBox2.Value = ""
    ' ...
End Sub

2. Использование нумерации с учетом фильтров/удаленных строк

Если строки могут удаляться, лучше использовать максимальный номер + 1:

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim maxID As Long

    Set ws = ThisWorkbook.Sheets("ИтоговаяТаблица")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

    ' Находим максимальный существующий ID
    If lastRow > 2 Then ' Если есть данные кроме заголовка
        maxID = Application.WorksheetFunction.Max(ws.Columns(1))
    Else
        maxID = 0
    End If

    ' Добавляем данные
    ws.Cells(lastRow, 1).Value = maxID + 1
    ws.Cells(lastRow, 2).Value = TextBox1.Value
    ' ... остальные поля
End Sub

3. Использование таблицы (ListObject)

Если данные находятся в формате таблицы Excel:

Private Sub CommandButton1_Click()
    Dim tbl As ListObject
    Dim newRow As ListRow

    ' Указываем таблицу
    Set tbl = ThisWorkbook.Sheets("ИтоговаяТаблица").ListObjects("Table1")

    ' Добавляем новую строку
    Set newRow = tbl.ListRows.Add

    ' Заполняем данные
    With newRow
        .Range(1) = tbl.ListRows.Count ' Порядковый номер
        .Range(2) = TextBox1.Value
        .Range(3) = TextBox2.Value
        ' ... остальные поля
    End With
End Sub

Комментарии

      1. Можно форматировать номера с ведущими нулями:

       ws.Cells(lastRow, 1).Value = Format(lastRow - 1, "000")
        1. Если нужно сохранять нумерацию при удалении строк, лучше использовать отдельный столбец с ID.

        1. Для больших таблиц отключите обновление экрана во время добавления:

         Application.ScreenUpdating = False
         ' ... код ...
         Application.ScreenUpdating = True
      				
      					Option Explicit
      
      Dim ShF1 As Worksheet ' объявили глоб.~ ShF1 как лист, ниже в нее присвоим лист таблицы
      Dim F1ListObject As ListObject ' объяв.глоб.~ как объект F1ListObject, присвоим имя умн.табл.
      Dim F1ListRow As ListRow ' глоб.~ как строка для строки диапазона
      
      Sub ShowF1() ' показать форму
          F1.Show
      End Sub
      
      Sub AddRecord() ' добавление новой записи
      
          Set ShF1 = ThisWorkbook.Worksheets("1-7 верт ") ' присвоить в ShF1 лист
          Set F1ListObject = ShF1.ListObjects("Таблица27") ' присвоить в F1ListObject диапазон Таблица27
          Set F1ListRow = F1ListObject.ListRows.Add ' присвоить в ~ F1ListRow добавление новой строки в F1ListObject
          
          F1ListRow.Range(1) = F1ListObject.ListRows.Count ' Порядковый номер (без заголовка) - в ~ F1ListObject
          
          ' все поля с ручным вводом
          F1ListRow.Range(2) = F1.Tx_type.Value ' присвоить в колонку 2 (т.е. "B") поле Tx_type (Тип)DRS
          F1ListRow.Range(3) = F1.Tx_article.Value ' Артикул
          F1ListRow.Range(4) = F1.TextBox9.Value
          F1ListRow.Range(5) = F1.TextBox7.Value
          F1ListRow.Range(6) = F1.TextBox8.Value
          F1ListRow.Range(18) = F1.Tx_massa.Value ' Масса
          F1ListRow.Range(19) = F1.Tx_srok_sluzh.Value
          F1ListRow.Range(158) = F1.TextBox1.Value
          F1ListRow.Range(160) = F1.TextBox2.Value
          F1ListRow.Range(162) = F1.TextBox3.Value
          F1ListRow.Range(164) = F1.TextBox4.Value
          F1ListRow.Range(240) = F1.TextBox5.Value ' картинки
          F1ListRow.Range(241) = F1.TextBox6.Value ' картинки
          
          ' все поля с вып. списками
          ' блок1
          
          F1ListRow.Range(11) = F1.Co_eaes.Value  
          F1ListRow.Range(14) = F1.Co_min_t.Value 
          
          ' блок2
          F1ListRow.Range(22) = F1.ComboBox2.Value ' 1-2
          F1ListRow.Range(29) = F1.ComboBox3.Value ' 2-1
          F1ListRow.Range(28) = F1.ComboBox5.Value ' 2-2
          F1ListRow.Range(36) = F1.ComboBox4.Value ' 3-1 
          F1ListRow.Range(35) = F1.ComboBox6.Value ' 3-2
          
          ' блок3 
          F1ListRow.Range(42) = F1.ComboBox75.Value ' 1-1
          F1ListRow.Range(43) = F1.ComboBox23.Value ' 1-2
          F1ListRow.Range(44) = F1.ComboBox32.Value ' 1-3
          
          F1ListRow.Range(47) = F1.ComboBox74.Value ' 2-1
          F1ListRow.Range(48) = F1.ComboBox8.Value  ' 2-2
          F1ListRow.Range(49) = F1.ComboBox10.Value ' 2-3
          
          F1ListRow.Range(52) = F1.ComboBox13.Value ' 3-1
          F1ListRow.Range(53) = F1.ComboBox9.Value  ' 3-2
          F1ListRow.Range(54) = F1.ComboBox11.Value ' 3-3
          
          F1ListRow.Range(57) = F1.ComboBox17.Value ' 4-1
          F1ListRow.Range(58) = F1.ComboBox24.Value ' 4-2
          F1ListRow.Range(59) = F1.ComboBox34.Value ' 4-3
          
          F1ListRow.Range(62) = F1.ComboBox16.Value ' 5-1
          F1ListRow.Range(63) = F1.ComboBox25.Value ' 5-2
          F1ListRow.Range(64) = F1.ComboBox35.Value ' 5-3
          
          F1ListRow.Range(67) = F1.ComboBox15.Value ' 6-1
          F1ListRow.Range(68) = F1.ComboBox26.Value ' 6-2
          F1ListRow.Range(69) = F1.ComboBox33.Value ' 6-3
          
          F1ListRow.Range(72) = F1.ComboBox18.Value ' 7-1
          F1ListRow.Range(73) = F1.ComboBox27.Value ' 7-2
          F1ListRow.Range(74) = F1.ComboBox36.Value ' 7-3
          
          F1ListRow.Range(77) = F1.ComboBox19.Value ' 8-1
          F1ListRow.Range(78) = F1.ComboBox28.Value ' 8-2
          F1ListRow.Range(79) = F1.ComboBox37.Value ' 8-3
          
          F1ListRow.Range(82) = F1.ComboBox20.Value ' 9-1
          F1ListRow.Range(83) = F1.ComboBox29.Value ' 9-2
          F1ListRow.Range(84) = F1.ComboBox38.Value ' 9-3
          
          F1ListRow.Range(87) = F1.ComboBox22.Value ' 10-1
          F1ListRow.Range(88) = F1.ComboBox30.Value ' 10-2
          F1ListRow.Range(89) = F1.ComboBox40.Value ' 10-3
          
          F1ListRow.Range(92) = F1.ComboBox21.Value ' 11-1
          F1ListRow.Range(93) = F1.ComboBox31.Value ' 11-2
          F1ListRow.Range(94) = F1.ComboBox39.Value ' 11-3
          
          ' 4 
          F1ListRow.Range(104) = F1.ComboBox48.Value ' 1-1
          F1ListRow.Range(109) = F1.ComboBox59.Value ' 1-2
          F1ListRow.Range(110) = F1.ComboBox68.Value ' 1-3
          
          F1ListRow.Range(115) = F1.ComboBox50.Value ' 2-1
          F1ListRow.Range(116) = F1.ComboBox44.Value ' 2-2
          F1ListRow.Range(117) = F1.ComboBox46.Value ' 2-3
          
          F1ListRow.Range(122) = F1.ComboBox49.Value ' 3-1
          F1ListRow.Range(123) = F1.ComboBox45.Value ' 3-2
          F1ListRow.Range(124) = F1.ComboBox47.Value ' 3-3
          
          F1ListRow.Range(129) = F1.ComboBox53.Value ' 4-1
          F1ListRow.Range(130) = F1.ComboBox60.Value ' 4-2
          F1ListRow.Range(131) = F1.ComboBox70.Value ' 4-3
          
          F1ListRow.Range(136) = F1.ComboBox52.Value ' 5-1
          F1ListRow.Range(137) = F1.ComboBox61.Value ' 5-2
          F1ListRow.Range(138) = F1.ComboBox71.Value ' 5-3
          
          F1ListRow.Range(143) = F1.ComboBox51.Value ' 6-1
          F1ListRow.Range(144) = F1.ComboBox62.Value ' 6-2
          F1ListRow.Range(145) = F1.ComboBox69.Value ' 6-3
      
          ' 7 
          F1ListRow.Range(158) = F1.TextBox1.Value   ' 1-1
          F1ListRow.Range(159) = F1.ComboBox41.Value ' 1-2
          
          F1ListRow.Range(160) = F1.TextBox2.Value   ' 2-1
          F1ListRow.Range(161) = F1.ComboBox42.Value ' 2-2
          
          F1ListRow.Range(162) = F1.TextBox4.Value   ' 3-1
          F1ListRow.Range(163) = F1.ComboBox73.Value ' 3-2
          
          F1ListRow.Range(164) = F1.TextBox3.Value   ' 4-1
          F1ListRow.Range(165) = F1.ComboBox72.Value ' 4-2
      
          
      
      
      End Sub
      
      
      Sub CompliteCat() ' выпадающий список категорий
      
      End Sub
      
      				
      			
      Telegram
      VK
      Email
      Прокрутить вверх