Sub Переработки() Dim tbl As Object Dim lastrow, lastrow1, lastrow2, lastcol As Integer Dim i, j As Integer Dim tip, fio, data, ob, vid, vr As Variant Dim mes As Integer Dim ListRow As ListRow Set tbl = Workbooks("Люди.xlsm").Sheets("Переработки").ListObjects("Переработка") mes = Workbooks("Люди.xlsm").Sheets("Табель").Range("B1").Value lastrow = Workbooks("Люди.xlsm").Sheets("Табель").Cells(Rows.Count, 1).End(xlUp).Row lastrow1 = tbl.DataBodyRange.Rows.Count tbl.DataBodyRange.Delete lastrow2 = Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Rows.Count + 1 lastcol = Workbooks("Люди.xlsm").Sheets("Табель").Cells(3, Columns.Count).End(xlToLeft).Column For i = 4 To lastrow For j = 6 To lastcol If Workbooks("Люди.xlsm").Sheets("Табель").Cells(i, j).Interior.Color = vbYellow Then lastrow1 = lastrow1 + 1 fio = Workbooks("Люди.xlsm").Sheets("Табель").Cells(i, 2) data = CDate(Workbooks("Люди.xlsm").Sheets("Табель").Cells(3, j) & "." & mes & ".2022") If Workbooks("Люди.xlsm").Sheets("Табель").Cells(3, j).Interior.Color = vbGreen Then tip = "выходной" vr = Workbooks("Люди.xlsm").Sheets("Табель").Cells(i, j) Else tip = "рабочий" vr = Workbooks("Люди.xlsm").Sheets("Табель").Cells(i, j) - 8 End If Call Значения(lastrow2, tip, fio, data, ob, rab) Call Переработки_заполнить(tbl, lastrow1, fio, data, ob, rab, vr) End If Next j Next i MsgBox ("Переработки сформированы согласно табелю за " & mes & ".2022 г.") End Sub Private Sub Значения(last, tip, fio, data, ob, rab) Dim a, b As Integer Dim arr_ob() As Variant Dim arr_rab() As Variant Erase arr_ob Erase arr_rab b = 0 If tip = "выходной" Then For a = 2 To lastrow2 If Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 1) = data And Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 3) = fio Then ob = Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 8) rab = Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 9) End If Next a Else For a = 2 To last If Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 1) = data And Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 3) = fio And Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 7) > 8 Then ob = Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 8) rab = Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 9) Else If Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 1) = data And Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 3) = fio And Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 7) <= 8 Then b = b + 1 ReDim Preserve arr_ob(0 To b) arr_ob(UBound(arr_ob)) = Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 8) ReDim Preserve arr_rab(0 To b) arr_rab(UBound(arr_rab)) = Workbooks("Люди.xlsm").Sheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(a, 9) ob = arr_ob(UBound(arr_ob)) rab = arr_rab(UBound(arr_rab)) End If End If Next a End If End Sub Private Sub Переработки_заполнить(tbl, str, fio, data, ob, rab, vr) tbl.Resize (tbl.Range.Resize(str, 5)) tbl.DataBodyRange.Cells(str, 1) = fio tbl.DataBodyRange.Cells(str, 2) = data tbl.DataBodyRange.Cells(str, 3) = ob tbl.DataBodyRange.Cells(str, 4) = rab tbl.DataBodyRange.Cells(str, 5) = vr End Sub
Работа с умной таблицей из кода VBA Excel. Обращение к ячейкам, строкам и столбцам умной таблицы. Добавление и удаление строк и столбцов.
Обращение к умной таблице
Все примеры кода в этой статье привязаны к таблице с именем «Таблица1», расположенной на активном листе:
Обращение к умной таблице:
ActiveSheet.ListObjects(«Таблица1») |
Обращение к диапазону умной таблицы на рабочем листе:
ActiveSheet.ListObjects(«Таблица1»).Range |
Проверяем:
Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Address ‘Результат: $B$3:$G$9 |
Далее все примеры кода VBA Excel, чтобы их не дублировать, будут представлены как аргументы метода Debug.Print.
Обращение к строкам
Работа с умной таблицей — обращение к строке заголовков:
Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Rows(1).Address ‘Результат: $B$3:$G$3 |
Таким же образом можно обращаться и к остальным строкам таблицы (Строка1-Строка6), указывая индекс нужной строки от 2 до 7.
К записям таблицы (Строка1-Строка6) обращаются через коллекцию ListRows, указывая индекс записи от 1 до 6:
With ActiveSheet.ListObjects(«Таблица1») Debug.Print .ListRows.Count ‘Результат: 6 Debug.Print .ListRows(1).Range.Address ‘Результат: $B$4:$G$4 Debug.Print .ListRows(2).Range.Address ‘Результат: $B$5:$G$5 End With |
Обращение к столбцам
Обращение к третьему столбцу умной таблицы из кода VBA Excel:
With ActiveSheet.ListObjects(«Таблица1») ‘Обращение через диапазон умной таблицы Debug.Print .Range.Columns(3).Address ‘Результат: $D$3:$D$9 Debug.Print .Range.Columns.Count ‘Результат: 6 ‘Обращение через коллекцию ListColumns Debug.Print .ListColumns(3).Range.Address ‘Результат: $D$3:$D$9 Debug.Print .ListColumns.Count ‘Результат: 6 End With |
Обращение к ячейкам
Работа с умной таблицей — обращение к ячейке «E7» с отображением ее значения:
With ActiveSheet.ListObjects(«Таблица1») Debug.Print .Range.Cells(5, 4) ‘Результат: 91 Debug.Print .ListColumns(4).Range(5) ‘Результат: 91 Debug.Print .ListRows(4).Range(4) ‘Результат: 91 End With |
Вставка и удаление строк
Вставка новой строки в конец умной таблицы:
ActiveSheet.ListObjects(«Таблица1»).ListRows.Add |
Удаление последней строки:
With ActiveSheet.ListObjects(«Таблица1») .ListRows(.ListRows.Count).Delete End With |
Вставка новой строки на место пятой записи (Строка5 в таблице) со сдвигом пятой и нижерасположенных записей вниз:
ActiveSheet.ListObjects(«Таблица1»).ListRows.Add 5 |
Удаление пятой строки:
ActiveSheet.ListObjects(«Таблица1»).ListRows(5).Delete |
Вставка и удаление столбцов
Вставка нового столбца в конец умной таблицы из кода VBA Excel:
ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add |
Удаление последнего столбца:
With ActiveSheet.ListObjects(«Таблица1») .ListColumns(.ListColumns.Count).Delete End With |
Вставка нового столбца на место четвертой графы таблицы со сдвигом четвертой и последующих граф вправо:
ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add 4 |
Удаление четвертого столбца таблицы:
ActiveSheet.ListObjects(«Таблица1»).ListColumns(4).Delete |
Создание и удаление умной таблицы описано в статье VBA Excel. Создание таблицы (умной, обычной)
Цикл на удаление строк в умной таблице с условием |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Автор vasa, 21 марта 2017, 14:44
vasa
- Посетитель форума
- Сообщения: 31
- Записан
Есть умная таблица, в которой нужно удалить строки вместе с форматированием из диапазона.
Нужно удалить строки с 4 по последнюю.
Пробовал различные варианты, но форматы не удаляются.
Помогите, пожалуйста!
Администратор
- Administrator
- Сообщения: 2,251
- Записан
Sub Макрос()
Dim shMat As Worksheet, lr As Long
‘1. Присваиваем листу «Материалы» имя «shMat», чтобы удобнее писать код.
Set shMat = Sheets(«Материалы»)
‘2. Поиск последней строки по столбцу «A».
‘ При использовании метода «End» не должно быть скрытых строк на листе.
lr = shMat.Cells(shMat.Rows.Count, «A»).End(xlUp).Row
‘3. Удаление строк с 4 по последнюю.
shMat.Rows(«4:» & lr).Columns(«A:C»).Delete Shift:=xlUp
End Sub
vasa
- Посетитель форума
- Сообщения: 31
- Записан
Все работает правильно.
Большое спасибо.
Администратор
- Administrator
- Сообщения: 2,251
- Записан
Если используется умная таблица, то можно не искать последнюю строку.
Этот макрос удаляет в умной таблице строки с 4 по последнюю.
Sub Макрос()
Dim shMat As Worksheet, tbl As ListObject
‘1. Присваиваем листу «Материалы» имя «shMat», чтобы удобнее писать код.
Set shMat = Sheets(«Материалы»)
‘2. Присваиваем умной таблице имя «tbl».
Set tbl = shMat.ListObjects(«Таблица1»)
‘3. Удаление строк с 4 по последнюю.
tbl.Range.Rows(«4:» & tbl.Range.Rows.Count).Delete Shift:=xlUp
End Sub
- Форум по VBA, Excel и Word
-
►
VBA, Excel -
►
VBA, макросы в Excel -
►
Excel Макрос: Как удалить строки вместе с форматом в умной таблице
Vba excel удалить строку умной таблицы
Есть файл, где на листе Аномалии есть умная таблица. На другом листе кнопка.
Я написал цикл и повесил на кнопку, который удаляет все строчки, где встречается Недостача. Но что-то явно упустил, после цикла 1 строка остается нетронутой. Что там поправить нужно, подскажите?
Есть файл, где на листе Аномалии есть умная таблица. На другом листе кнопка.
Я написал цикл и повесил на кнопку, который удаляет все строчки, где встречается Недостача. Но что-то явно упустил, после цикла 1 строка остается нетронутой. Что там поправить нужно, подскажите? Raven2009
Сообщение Добрый день.
Есть файл, где на листе Аномалии есть умная таблица. На другом листе кнопка.
Я написал цикл и повесил на кнопку, который удаляет все строчки, где встречается Недостача. Но что-то явно упустил, после цикла 1 строка остается нетронутой. Что там поправить нужно, подскажите? Автор — Raven2009
Дата добавления — 15.12.2019 в 18:03
RAN | Дата: Воскресенье, 15.12.2019, 18:37 | Сообщение № 2 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Хитрости »
28 Май 2011 644589 просмотров
Как удалить строки по условию?
Предположу, что почти каждый сталкивался с ситуацией, когда необходимо удалить только определенные строки: имеется большая таблица и необходимо удалить из неё только те строки, которые содержат какое-то слово (цифру, фразу). Для выполнения подобной задачи можно воспользоваться несколькими способами.
Способ первый:
Использовать встроенное средство Excel — фильтр. Сначала его необходимо «установить» на листе:
- Выделяем таблицу с данными, включая заголовки. Если их нет — то выделяем с самой первой строки таблицы, в которой необходимо удалить данные
- устанавливаем фильтр:
- для Excel 2003: Данные—Фильтр—Автофильтр
- для Excel 2007-2010: вкладка Данные(Data) —Фильтр(Filter)(или вкладка Главная(Home) —Сортировка и фильтр(Sort&Filter) —Фильтр(Filter))
Теперь выбираем условие для фильтра:
- в Excel 2003 надо выбрать Условие и в появившейся форме выбрать непосредственно условие(«равно», «содержит», «начинается с» и т.д.), а напротив значение в соответствии с условием.
- Для 2007-2010 Excel нужно выбрать Текстовые фильтры(Text Filters) и либо сразу выбрать одно из предлагаемых условий, либо нажать Настраиваемый фильтр(Custom Filter) и ввести значения для отбора в форме
После этого удалить отфильтрованные строки. В 2007 Excel могут возникнуть проблемы с удалением отфильтрованных строк, поэтому рекомендую сначала так же прочитать статью: Excel удаляет вместо отфильтрованных строк — все?! Как избежать.
Способ второй:
применить код VBA, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.
Sub Del_SubStr() Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim lMet As Long Dim arr sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "www.excel-vba.ru", "") If sSubStr = "" Then lMet = 0 Else lMet = 1 lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow 'цикл с первой строки до конца If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
Если значение sSubStr не будет указано, то будут удалены строки, ячейки указанного столбца которых, пустые.
Данный код необходимо поместить в стандартный модуль. Вызвать с листа его можно нажатием клавиш Alt+F8, после чего выбрать Del_SubStr и нажать Выполнить. Если в данном коде в строке
If -(InStr(Cells(li, 1), sSubStr) > 0) = lMet Then
вместо = lMet указать <> lMet, то удаляться будут строки, не содержащие указанное для поиска значение. Иногда тоже удобно.
Но. Данный код просматривает строки на предмет частичного совпадения указанного значения. Например, если Вы укажете текст для поиска «отчет», то будут удалены все строки, в которых встречается это слово(«квартальный отчет», «отчет за месяц» и т.д.). Это не всегда нужно. Поэтому ниже приведен код, который будет удалять только строки, указанные ячейки которых равны конкретно указанному значению:
Sub Del_SubStr() Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim arr sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "www.excel-vba.ru", "") lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow 'цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
Здесь так же, как и в случае с предыдущим кодом можно заменить оператор сравнения(Cells(li, lCol) = sSubStr) с равно на неравенство(Cells(li, lCol) <> sSubStr) и тогда удаляться будут строки, значения ячеек которых не равно указанному.
УДАЛЕНИЕ СТРОК НА ОСНОВАНИИ СПИСКА ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
Иногда бывают ситуации, когда необходимо удалить строки не по одному значению, а по нескольким. Например, если строка содержит или Итог или Отчет. Ниже приведен код, при помощи которого можно удалить строки, указав в качестве критерия диапазон значений.
Значения, которые необходимо найти и удалить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — они все будут удалены. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
Sub Del_Array_SubStr() Dim sSubStr As String 'искомое слово или фраза Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 'заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value 'Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With 'удаляем Dim rr As Range For lr = 1 To UBound(avArr, 1) sSubStr = avArr(lr, 1) For li = 1 To lLastRow 'цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li DoEvents Next lr If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
Чтобы код выше удалял строки не по точному совпадению слов, а по частичному(например, в ячейке записано «Привет, как дела?», а в списке есть слово «привет» — надо удалить, т.к. есть слово «привет»), то надо строку:
If CStr(arr(li, 1)) = sSubStr Then
заменить на такую:
If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then
УДАЛЕНИЕ ИЗ ЛИСТА СТРОК, КОТОРЫХ НЕТ В СПИСКЕ ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
Т.к. в последнее время стало поступать все больше и больше вопросов как не удалять значения по списку, а наоборот — оставить в таблице только те значения, которые перечислены в списке — решил дополнить статью и таким кодом.
Значения, которые необходимо оставить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — после работы кода на листе будут оставлены только те строки, в которых присутствует хоть одно из перечисленных в списке значений. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
В отличие от приведенных выше кодов, данный код ориентирован на то, что значения в списке указаны не полностью. Т.е. если необходимо оставить только те ячейки, в которых встречается слово «активы», то в списке надо указать только это слово. В этом случае если в ячейке будет записана фраза «Нематериальные активы» или «Активы сторонние» — эти ячейки не будут удалены, т.к. в них встречается слово «активы». Регистр букв при этом неважен.
'процедура оставляет в листе только те значения, которые перечислены в списке Sub LeaveOnlyFoundInArray() Dim sSubStr As String 'искомое слово или фраза Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr Dim IsFind As Boolean lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 'заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value 'Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With 'удаляем Dim rr As Range For li = 1 To lLastRow 'цикл с первой строки таблицы до конца IsFind = False For lr = 1 To UBound(avArr, 1) 'цикл по списку значений на удаление sSubStr = avArr(lr, 1) If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then IsFind = True End If DoEvents Next lr 'если значение таблицы не найдено в списке - удаляем строку If Not IsFind Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
Чтобы код выше сравнивал значения таблицы со значениями списка по точному совпадению слов, а не по частичному, то надо строку:
If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then
заменить на такую:
If CStr(arr(li, 1)) = sSubStr Then
Для всех приведенных кодов можно строки не удалять, а скрывать. Для этого надо строку:
If Not rr Is Nothing Then rr.EntireRow.Delete
заменить на такую:
If Not rr Is Nothing Then rr.EntireRow.Hidden = True
По умолчанию все коды начинают просмотр строк с первой по последнюю заполненную на листе. И если необходимо удалять строки не с первой или не по последнюю, то надо внести корректировки в эту строку:
For li = 1 To lLastRow 'цикл с первой строки до конца
1 — это первая строка; lLastRow — определяется автоматически кодом и равна номеру последней заполненной строки на листе. Если надо начать удалять строки только с 7-ой строки(например, в первых 6-ти шапка), то код будет выглядеть так:
For li = 7 To lLastRow 'цикл с седьмой строки до конца
А если надо удалять только с 3-ей по 300-ю, то код будет выглядеть так:
For li = 3 To 300 'цикл с третьей строки до трехсотой
Так же см.:
Что такое макрос и где его искать?
Что такое модуль? Какие бывают модули?
Как создать кнопку для вызова макроса на листе
Удаление всех пустых строк в таблице
Удаление пустых столбцов на листе
Установить Быстрый фильтр
Фильтр
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика