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
Листинг программы
- Sub Макрос1()
- '
- ' Макрос1 Макрос
- '
- ' Сочетание клавиш: Ctrl+z
- '
- Dim ra As Range, delra As Range
- Application.ScreenUpdating = False
- Range("C:C,D:D,E:E,F:F,H:H,J:J").Delete Shift:=xlToLeft
- Columns("A:B").ColumnWidth = 18
- Columns("C:C").ColumnWidth = 20
- Columns("D:D").ColumnWidth = 28
- Columns("E:E").ColumnWidth = 7
- Columns("F:F").ColumnWidth = 12
- r = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
- Range("A1:F1").Font.Size = 11
- With Rows("1:1")
- .RowHeight = 48
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlBottom
- .ShrinkToFit = False
- .ReadingOrder = xlContext
- End With
- Range(Cells(1, 1), Cells(r, 6)).Borders.LineStyle = xlContinuous
- Range("A3:F1048576").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlGuess, _
- OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
- DataOption1:=xlSortNormal
- 'Перенос столбцов.
- Columns("D:E").Cut
- Columns("A:A").Insert Shift:=xlToRight
- Columns("E:E").Cut
- Columns("G:G").Insert Shift:=xlToRight
- Range("A1").Select
- 'Удаление строк.
- ТекстДляПоиска = "Снят" ' удаляем строки с таким текстом
- ' перебираем все строки в используемом диапазоне листа
- For Each ra In ActiveSheet.UsedRange.Rows
- ' если в строке найден искомый текст
- If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
- ' добавляем строку в диапазон для удаления
- If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
- End If
- Next
- ' если подходящие строки найдены - удаляем их
- If Not delra Is Nothing Then delra.EntireRow.Delete
- Range("F:F").Delete Shift:=xlToLeft
- 'Заголовок.
- Rows("1:3").Insert Shift:=xlDown
- Range("A1") = "Отчет по работе водителей"
- Range("C2") = "7/5/2016 10:00"
- Range("D2") = "7/6/2016 10:00"
- 'Выравнивание заголовка
- With Range("A1:E1")
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlBottom
- .WrapText = False
- .Merge
- With .Font
- .Name = "Calibri"
- .Size = 14
- .ThemeColor = xlThemeColorLight1
- .ThemeFont = xlThemeFontMinor
- .Bold = True
- End With
- End With
- Range("B2") = "с/по"
- Range("B2").Font.Bold = True
- With Range("C2:D2")
- With .Borders
- .LineStyle = xlContinuous
- .Weight = xlMedium
- End With
- .Borders(xlInsideVertical).Weight = xlThin
- .Borders(xlInsideHorizontal).LineStyle = xlNone
- End With
- 'Название столбцов.
- Range("B4") = "Заявки"
- Range("C4") = "Первая заявка"
- Range("D4") = "Последняя заявка"
- Range("E4") = "Сумма"
- Range("D5:D883800").ClearContents
- End Sub
- Sub Макрос1плюс2()
- Макрос1
- Макрос2
- End Sub
- Sub Макрос2()
- '
- ' Макрос2 Макрос
- '
- ' Сочетание клавиш: Ctrl+x
- '
- Dim i%, k%, N%, LastRow%, A, MinDate As Date
- Application.ScreenUpdating = False
- 'Определение минимальной даты
- LastRow = Cells(Rows.Count, "C").End(xlUp).Row
- A = Range("C5:C" & LastRow).Value
- MinDate = Now + 10000
- For i = 5 To LastRow
- If Cells(i, 3) < MinDate Then MinDate = Cells(i, 3)
- Next
- MinDate = DateAdd("h", 10, Fix(MinDate))
- [C2] = MinDate
- [D2] = MinDate + 1
- 'Удаление строк (с датой).
- For i = 5 To LastRow
- If Range("C" & i).Value < Range("C2").Value Or Range("C" & i).Value > Range("D2").Value Then
- If Range("C" & i).Value = "" Then Exit For
- Rows(i).Delete
- i = i - 1
- End If
- Next
- 'Новую книгу создавать в середине дела не надо.
- 'ActiveSheet.Copy ' Создает новую книгу, дальнейшее происходит в ней
- 'Подсчет заказов
- For r = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
- If Cells(r + 1, 1) <> Cells(r, 1) Then
- Cells(r + 1, 2) = N: N = 1
- Cells(r + 1, 4) = lastorder: lastorder = Cells(r, 3)
- Else
- Rows(r + 1).Delete
- N = N + 1
- End If
- If Cells(r, 1) = "Водитель" Then Exit For
- Next r
- 'Добавление водителей
- Rows("6:9").Insert Shift:=xlDown
- Range("A6") = "109 Муминджанов Фахриддин"
- Range("A7") = "150 Ли Игорь"
- Range("A8") = "143 Умнов Алексей"
- Range("A9") = "121 Квон Стас"
- 'Сортировка таблицы
- Range("A5:F1048576").Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess, _
- OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
- DataOption1:=xlSortNormal
- 'Вставка недостающих номеров с 100 - 199
- For k = 100 To 199
- If Trim$(Cells(k - 95, 1)) <> "" Then
- N = Val(Left(Cells(k - 95, 1), 3))
- If N > k Then
- Rows(k - 95).Insert Shift:=xlDown
- With Cells(k - 95, 1): .NumberFormat = "@": .Value = k: End With
- End If
- End If
- Next k
- 'Добавление пустых строк.
- For i = 5 To 500
- If WorksheetFunction.CountA(Range(Cells(i, 1), Cells(i, 5))) < 1 Then
- Range(Cells(i, 1), Cells(i, 5)).Select
- Selection.Borders.LineStyle = xlContinuous
- Selection.Borders.Weight = xlThin
- Exit For
- Else
- Range(Cells(i, 1), Cells(i, 5)).Interior.Color = xlNone
- End If
- Next
- Selection.Resize(15, 40).Insert Shift:=xlDown
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д