VBA вставка недостающих цифр

Узнай цену своей работы

Формулировка задачи:

Добрый день Помогите пожалуйста написать макрос Имеется таблица (A - E), начало таблицы с 4 строки - заголовок, длина таблицы не фиксированная. В столюце A указано число и фамилия Необходимо написать макрос, чтоб анализировался столбец A, и начиная с A5 до конца таблицы, вставлялись строки с недостающими цифрами без фамилий. В таблице есть также фамилии с цифрами 200 и более, но необходимо вставлять только с 100 до 199, с 200 и далее чтоб строки не вставлялись, осталось как есть. Сейчас таблица имеет вид:
Отчет по работе        
  с/по 09.06.2016 10.06.2016  
         
Водитель Заявки Первая заявка Последняя заявка Сумма
101 З****в Алексей 15 09.06.2016 12:08 10.06.2016 8:47  
102 К****н Виктор 4 10.06.2016 7:56 10.06.2016 9:43  
105 К****в Алексей 12 09.06.2016 10:57 10.06.2016 9:49  
106 Ш****т Светлана 19 09.06.2016 10:52 10.06.2016 9:51  
107 Я****о Владислав 3 10.06.2016 7:38 10.06.2016 8:25  
108 П****к Александр 20 09.06.2016 10:08 10.06.2016 9:46  
111 П****в Сергей 14 09.06.2016 10:41 10.06.2016 8:34  
112 Н****в Ибрагим 23 09.06.2016 10:14 09.06.2016 23:35  
113 А****в Александр 29 09.06.2016 10:55 10.06.2016 7:43  
114 Г****в Дмитрий 22 09.06.2016 10:24 10.06.2016 9:54  
115 Х****в Ильхомжон 7 09.06.2016 11:10 10.06.2016 0:41  
117 К****н Леонид 11 09.06.2016 20:25 10.06.2016 8:54  
После выполнения макроса должно получиться:
Отчет по работе        
  с/по 09.06.2016 1 10.06.2016  
         
Водитель Заявки Первая заявка Последняя заявка Сумма
100        
101 З****в Алексей 15 09.06.2016 12:08 10.06.2016 8:47  
102 К****н Виктор 4 10.06.2016 7:56 10.06.2016 9:43  
103        
104        
105 К****в Алексей 12 09.06.2016 10:57 10.06.2016 9:49  
106 Ш****т Светлана 19 09.06.2016 10:52 10.06.2016 9:51  
107 Я****о Владислав 3 10.06.2016 7:38 10.06.2016 8:25  
108 П****к Александр 20 09.06.2016 10:08 10.06.2016 9:46  
109        
110        
111 П****в Сергей 14 09.06.2016 10:41 10.06.2016 8:34  
112 Н****в Ибрагим 23 09.06.2016 10:14 09.06.2016 23:35  
113 А****в Александр 29 09.06.2016 10:55 10.06.2016 7:43  
114 Г****в Дмитрий 22 09.06.2016 10:24 10.06.2016 9:54  
115 Х****в Ильхомжон 7 09.06.2016 11:10 10.06.2016 0:41  
116        
117 К****н Леонид 11 09.06.2016 20:25 10.06.2016 8:54  

Решение задачи: «VBA вставка недостающих цифр»

textual
Листинг программы
  1. Sub Макрос1()
  2. '
  3. ' Макрос1 Макрос
  4. '
  5. ' Сочетание клавиш: Ctrl+z
  6. '
  7.    Dim ra As Range, delra As Range
  8.     Application.ScreenUpdating = False
  9.     Range("C:C,D:D,E:E,F:F,H:H,J:J").Delete Shift:=xlToLeft
  10.     Columns("A:B").ColumnWidth = 18
  11.     Columns("C:C").ColumnWidth = 20
  12.     Columns("D:D").ColumnWidth = 28
  13.     Columns("E:E").ColumnWidth = 7
  14.     Columns("F:F").ColumnWidth = 12
  15.     r = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
  16.     Range("A1:F1").Font.Size = 11
  17.     With Rows("1:1")
  18.         .RowHeight = 48
  19.         .HorizontalAlignment = xlCenter
  20.         .VerticalAlignment = xlBottom
  21.         .ShrinkToFit = False
  22.         .ReadingOrder = xlContext
  23.     End With
  24.     Range(Cells(1, 1), Cells(r, 6)).Borders.LineStyle = xlContinuous
  25.     Range("A3:F1048576").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlGuess, _
  26.         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  27.         DataOption1:=xlSortNormal
  28.     'Перенос столбцов.
  29.    Columns("D:E").Cut
  30.     Columns("A:A").Insert Shift:=xlToRight
  31.     Columns("E:E").Cut
  32.     Columns("G:G").Insert Shift:=xlToRight
  33.     Range("A1").Select
  34.     'Удаление строк.
  35.    ТекстДляПоиска = "Снят"    ' удаляем строки с таким текстом
  36.  
  37.     ' перебираем все строки в используемом диапазоне листа
  38.    For Each ra In ActiveSheet.UsedRange.Rows
  39.         ' если в строке найден искомый текст
  40.        If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
  41.             ' добавляем строку в диапазон для удаления
  42.            If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
  43.         End If
  44.     Next
  45.     ' если подходящие строки найдены - удаляем их
  46.    If Not delra Is Nothing Then delra.EntireRow.Delete
  47.     Range("F:F").Delete Shift:=xlToLeft
  48.    
  49.     'Заголовок.
  50.    Rows("1:3").Insert Shift:=xlDown
  51.     Range("A1") = "Отчет по работе водителей"
  52.     Range("C2") = "7/5/2016 10:00"
  53.     Range("D2") = "7/6/2016 10:00"
  54.     'Выравнивание заголовка
  55.    With Range("A1:E1")
  56.         .HorizontalAlignment = xlCenter
  57.         .VerticalAlignment = xlBottom
  58.         .WrapText = False
  59.         .Merge
  60.         With .Font
  61.             .Name = "Calibri"
  62.             .Size = 14
  63.             .ThemeColor = xlThemeColorLight1
  64.             .ThemeFont = xlThemeFontMinor
  65.             .Bold = True
  66.         End With
  67.     End With
  68.  
  69.     Range("B2") = "с/по"
  70.     Range("B2").Font.Bold = True
  71.     With Range("C2:D2")
  72.         With .Borders
  73.             .LineStyle = xlContinuous
  74.             .Weight = xlMedium
  75.         End With
  76.         .Borders(xlInsideVertical).Weight = xlThin
  77.         .Borders(xlInsideHorizontal).LineStyle = xlNone
  78.     End With
  79.  
  80.     'Название столбцов.
  81.    Range("B4") = "Заявки"
  82.     Range("C4") = "Первая заявка"
  83.     Range("D4") = "Последняя заявка"
  84.     Range("E4") = "Сумма"
  85.    
  86.     Range("D5:D883800").ClearContents
  87. End Sub
  88. Sub Макрос1плюс2()
  89.     Макрос1
  90.     Макрос2
  91. End Sub
  92. Sub Макрос2()
  93.     '
  94.    ' Макрос2 Макрос
  95.    '
  96.    ' Сочетание клавиш: Ctrl+x
  97.    '
  98.    Dim i%, k%, N%, LastRow%, A, MinDate As Date
  99.     Application.ScreenUpdating = False
  100.     'Определение минимальной даты
  101.    LastRow = Cells(Rows.Count, "C").End(xlUp).Row
  102.     A = Range("C5:C" & LastRow).Value
  103.     MinDate = Now + 10000
  104.     For i = 5 To LastRow
  105.         If Cells(i, 3) < MinDate Then MinDate = Cells(i, 3)
  106.     Next
  107.     MinDate = DateAdd("h", 10, Fix(MinDate))
  108.     [C2] = MinDate
  109.     [D2] = MinDate + 1
  110.     'Удаление строк датой).
  111.    For i = 5 To LastRow
  112.         If Range("C" & i).Value < Range("C2").Value Or Range("C" & i).Value > Range("D2").Value Then
  113.             If Range("C" & i).Value = "" Then Exit For
  114.             Rows(i).Delete
  115.             i = i - 1
  116.         End If
  117.     Next
  118.     'Новую книгу создавать в середине дела не надо.
  119.    'ActiveSheet.Copy ' Создает новую книгу, дальнейшее происходит в ней
  120.     'Подсчет заказов
  121.    For r = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
  122.         If Cells(r + 1, 1) <> Cells(r, 1) Then
  123.             Cells(r + 1, 2) = N: N = 1
  124.             Cells(r + 1, 4) = lastorder: lastorder = Cells(r, 3)
  125.         Else
  126.             Rows(r + 1).Delete
  127.             N = N + 1
  128.         End If
  129.         If Cells(r, 1) = "Водитель" Then Exit For
  130.     Next r
  131.      'Добавление водителей
  132.    Rows("6:9").Insert Shift:=xlDown
  133.     Range("A6") = "109 Муминджанов Фахриддин"
  134.     Range("A7") = "150 Ли Игорь"
  135.     Range("A8") = "143 Умнов Алексей"
  136.     Range("A9") = "121 Квон Стас"
  137.      'Сортировка таблицы
  138.    Range("A5:F1048576").Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess, _
  139.         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  140.         DataOption1:=xlSortNormal
  141.     'Вставка недостающих номеров с 100 - 199
  142.    For k = 100 To 199
  143.         If Trim$(Cells(k - 95, 1)) <> "" Then
  144.             N = Val(Left(Cells(k - 95, 1), 3))
  145.             If N > k Then
  146.                 Rows(k - 95).Insert Shift:=xlDown
  147.                 With Cells(k - 95, 1): .NumberFormat = "@": .Value = k: End With
  148.             End If
  149.         End If
  150.     Next k
  151.     'Добавление пустых строк.
  152.    For i = 5 To 500
  153.         If WorksheetFunction.CountA(Range(Cells(i, 1), Cells(i, 5))) < 1 Then
  154.             Range(Cells(i, 1), Cells(i, 5)).Select
  155.             Selection.Borders.LineStyle = xlContinuous
  156.             Selection.Borders.Weight = xlThin
  157.             Exit For
  158.         Else
  159.             Range(Cells(i, 1), Cells(i, 5)).Interior.Color = xlNone
  160.         End If
  161.     Next
  162.     Selection.Resize(15, 40).Insert Shift:=xlDown
  163. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут