Сообщество - MS, Libreoffice & Google docs

MS, Libreoffice & Google docs

762 поста 14 934 подписчика

Популярные теги в сообществе:

143

Макрос для удаления пустых столбцов в книгах Excel

При выгрузке из 1С, часто файлы содержат пустые столбцы (в т.ч. и скрытые), которые мешают дальнейшей обработке данных. Приходится удалять их руками, что совсем не продуктивно. Макрос решит задачу мгновенно.

Копируйте код и сохраните его в Личной книге макросов.

Sub ColumnDel()
'Удаляем пустые столбцы
Dim i As Long
Dim rgMy1 As Range
Dim rgMy2 As Range
Set rgMy1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
Application.ScreenUpdating = False
For i = 1 To rgMy1.Columns.Count
If WorksheetFunction.CountA(rgMy1.Columns(i).EntireColumn) = 0 Then
If rgMy2 Is Nothing Then
Set rgMy2 = rgMy1.Columns(i).EntireColumn
Else
Set rgMy2 = Application.Union(rgMy2, rgMy1.Columns(i).EntireColumn)
End If
End If
Next
If rgMy2 Is Nothing Then
MsgBox "Не найдено пустых столбцов", vbInformation, "Для информации"
Else:
rgMy2.[Delete]
End If
Application.ScreenUpdating = True
End Sub

Открыть редактор VBA Alt +F11:

Вызвать меню для выполнения или изменения макросов Alt + F8:

На выполнение макроса можно назначить "Горячие клавиши", нажав в окне Параметры:

В поле Сочетание клавиш введите прописные или строчные буквы, которые вы хотите использовать. Важен регистр и язык. Нельзя назначить макрос на функциональные клавиши Excel.

Для Windows сочетание клавиш для строчных букв — Ctrl + буква. Для прописных букв — Ctrl + Shift + БУКВА.

Для Mac сочетание клавиш для строчных букв — Option + Command + буква или Ctrl + буква. Для прописных букв — Ctrl + Shift + БУКВА.

Показать полностью 3
23

Excel/VBA. Автоматическое проставление даты по условию

Добрый день.
Проблема вроде не сильно сложная, но моих познаний немного не хватает для доведения кода до ума.  Буду очень благодарен, если кто поможет.
Есть таблица ввода данных, которая обозначена желтым на снимке. В строке может быть заполнена одна, несколько наугад или все ячейки. 
При первичном вводе данных в любую ячейку строки автоматически выводится время ввода и фамилия "создавшего позицию". Дата и имя заносятся в голубые(?) поля и остаются неизменными.
При внесении изменений в строку желтой зоны или при добавлении данных заполняется оранжевая зона, где дата и имя меняются постоянно и остаются сведения о последнем изменившем позицию. Если занудствовать, то получается что человек вроде как только вводит несколько данных и "создает" позицию, а его уже записывают в изменившие, но это не сильно принципиально, потому что по дате понятно будет что это за действие было. Но если можно сделать так, чтобы оранжевое поле заполнялось только после следующего открытия файла например, было бы вообще чудесно.

На форумах нашел код, который примерно соответствует запросам, но не могу окончательно его адаптировать.
По коду получается, что берем значение из первого столбца. А как использовать именованный диапазон(!) в данном случае я не очень понимаю. Именно именованный диапазон нужен потому что в рабочем файле таких таблиц с дюжину примерно в разных участках листа.
Вторая проблема - если вводить значения в разные столбцы, то и дата/имя будут каждый раз отскакивать в разные столбцы, потому что "offset" фиксированный от измененной ячейки. Вроде можно вместо смещения задать диапазон, но тоже возникли проблемы с адаптацией.

Надеюсь не очень сумбурно и суть вопроса ясна. Заранее благодарю

Показать полностью 2
158

Ответ на пост «Помощь с Word-ом»1

Как-то раз я психанул и составил процедуру, удаляющую все подсветки символов, абзацев, ячеек таблицы и всего этого внутри ячеек таблицы. Особенно полезно это для текста и и таблиц, скопированных из интернета.

Итак, поместите код в стандартный модуль. Выделите скопированный из инета текст или таблицу, затем запустите процедуру defill

Sub defill()

'

' Удаляет подсветку букв, текста, абзаца, ячеек, таблиц

' А теперь ещё и ставит чёрный цвет текста

StartUndoRecord "Удаление фона"

On Error Resume Next

If Selection.Type = wdSelectionIP Then

If MsgBox("Эта функция убирает цветной фон выделенного фрагмента. Сейчас ничего не выделено. Обработать весь текст?", vbYesNo + vbQuestion, "Ничего не выделено") = vbYes Then

DefillRange ActiveDocument.Content

End If

Else

DefillRange Selection.Range

End If

On Error GoTo 0

StopUndoRecord

End Sub

Sub DefillRange(rng As Range)

Dim aTable As Table

rng.Font.Color = wdColorAutomatic

With rng.ParagraphFormat

With .Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

End With

With rng.Font.Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

rng.HighlightColorIndex = wdNoHighlight

For Each aTable In rng.Tables

With aTable.Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

With aTable.Range.Cells.Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

Next aTable

End Sub

Public Sub StartUndoRecord(Optional UR_name$ = "Какой-то макрос")

#If VBA7 Then

' для ВБА 7 (офис 2010) и выше

Application.UndoRecord.StartCustomRecord UR_name

#End If

End Sub

Public Sub StopUndoRecord()

#If VBA7 Then

Application.UndoRecord.EndCustomRecord

#End If

End Sub


Немножко спагетти-код, потому что главную процедуру я составил в 2011 году, для ворда 2003.

Назначьте на кнопку панели инструментов макрос defill.

Всем удачи в форматировании документов!

Показать полностью
44

Filter, sort, unique (GS18)

Привет, дорогие чатлане!

Пришло время поговорить о функциях, освоив которые я окончательно забросил excel и погрузился в изучение гугловых таблиц. Все автоматизации (а у нас их много) держатся на 4 функциях - этих 3 + впр (без него никуда). Пост будет длинным, постараюсь показать не только базовый синтаксис и простые варианты использования, но и красивые и необычные решения. Наливаем чай, переворачиваем календарь и проникаемся мощью гугл таблиц.

Сначала про синтаксис. Он очень простой.

Фильтр = сначала диапазон данных который фильтруем + логические условия (>,<,= или более сложные). При этом условия могут быть для столбца или строки, которые не входят в фильтруемый диапазон, главное чтобы размеры совпадали.

Сорт = сначала сортируемый диапазон, потом номер столбца внутри этого диапазона и параметр 0/1 (возрастание/убывание), либо можно как с фильтром - указать конкретный столбец и за пределами сорта.

Юник = тут все просто - массив указываем - он удаляет дубли.

Пример:

Теперь перейдем к более интересным кейсам (буду частично дублировать прошлые посты, но хочется собрать весь контент по этим функциям в одном месте).

Кейс 1 - Вывести только элементы, которых нет в справочном массиве (про это был отдельный пост: Фильтры и ВПРы в ГТ (GS2)):

Кейс 2 - обратная ситуация, вывести только те элементы, которые есть в справочнике:

Кейс 3 - двойная фильтрация (часто используется когда нужно сделать много фильтров и нужно протянуть формулу или когда нужно дать пользователю варианты фильтрации без погружения в формулу):

Мы выбираем столбец для условия фильтром внутри фильтра.

Кейс 4 - Найти все элементы, содержащие внутри себя регулярное выражение (кусок текста):

Обратите внимание - эта штука регистрочувствительная, поэтому я отсек первую букву.

Кейс 5 - выделить из мусорной (с лишними данными) таблицы ID и вывести список уникальных ID, содержащих внутри себя определенные символы (часто используется для выгрузки счетов или работы с индексами наименований):

Начнем с того, что обрежем хвостики от наших айдишников. Потом пропустим это все через формулу массива:

Теперь соберем из этого фильтр. Допустим нам нужны все ID, в которых есть цифра 4.

Обратите внимание, REGEXMATCH работает только с текстом, поэтому 4 мы берем в кавычки, делаем ее из цифры текстом.

Теперь собираем все в одну формулу:

Ну, и если бы у нас были дубли, то всю эту конструкцию запихиваем в unique().

Кейс 6 - Вывести все уникальные записи и отсортировать их в алфавитном порядке:

Можно и сорт запихнуть в юник и юник в сорт.

Вот и все. Постарался собрать самые частые кейсы, по крайней мере из того что помню за последнее время. Если еще наберется - сделаю вторую часть этого поста.

Показать полностью 10
36

Картинки в гугл таблицах (GS17)

Привет, дорогие чатлане!

Сегодня расскажу про работу с изображениями в ГТ, а именно - о вставке изображений в ячейку и функции image.

Функцию вставки в ячейку показала в свое время новая сотрудница (привет если ты читаешь), мы тогда уже года два плотно сидели на таблицах и о ней не знали (о функции).

Вставка в ячейку:

Можно загрузить с компа или по ссылке:

Выглядит это следующим образом:

К контенту в ячейках можно обращаться с помощью других функций (напр. ВПР или filter):

По поводму функции image. Делает она тоже самое, но только по ссылке.

Н.Б. Если нужно загрузить с компа - загружайте на гугл драйв и копируйте ссылку.

Для функции image можно указать точные размеры для вывода фото в таблицу и сделать это можно четырьмя способами.

В данном случай я не буду пытаться переписать документацию ибо для image она дофига понятная:

https://support.google.com/docs/answer/3093333?hl=RU

размер – [ НЕОБЯЗАТЕЛЬНО – 1 по умолчанию ] – режим отображения изображения:

1 – изменяет размер изображения таким образом, чтобы оно целиком помещалось в ячейке. Сохраняет соотношение сторон изображения.

2 – растягивает или сжимает изображение таким образом, чтобы оно целиком помещалось в ячейке. Не сохраняет соотношение сторон изображения.

3 – размещает изображение в оригинальном размере. Может приводить к кадрированию изображения.

4 – позволяет указать размеры изображения вручную.

На всякий случай покажу что такое "кадрирование изображения":

Вот и всё. Пост получился лайтовым, но функция полезная и далеко не все о ней знают.

Традиционно, ссылка на таблицу: https://docs.google.com/spreadsheets/d/1vGtFrokmboWuK7w9nkBM...

Показать полностью 6

Помогите решить задачку

Помогите решить задачку

Вы подумываете о рекламировании продуктов корпорации Microsoft в популярной музыкальной телепрограмме. Вы платите одну цену за первую группу рекламных объявлений, но при покупке дополнительных объявлений плата за каждое снижается, как показано в табл. 2.4.

Например, если вы покупаете 8 рекламных объявлений, то платите по 12 000 долл. за

первые 5 и по 11 000 долл. за каждое из трех следующих рекламных объявлений. Если

вы покупаете 14 рекламных объявлений, то платите по 12 000 долл. за первые 5 и по

11 000 долл. за следующие 5 объявлений и по 10 000 долл. за каждое из последних четырех рекламных объявлений.

Напишите формулу, которая подсчитывает общую стоимость любого числа рекламных объявлений. Подсказка: вероятно, вам понадобятся, по

меньшей мере, три столбца в вашей таблице поиска, и ваша формула может содержать

две функции просмотра.

Показать полностью
73

Продвинутые спарлайны в гугл таблицах (GS16)

И снова здравствуйте.

Отдельно пилю пост про использование спарклайнов, как сделать таблицы нагляднее. Разберу один пример - как сделать заполняющуюся шкалу выполнения нескольких задач и сделать разные цвета в зависимости от прогресса. Меньше 25% - красная, от 25% до 50% - желтая, от 50% до 75% - зеленая, от 75% и выше - розовая (потому что я так хочу).

Про синтаксис можно прочитать в прошлом посте: Спарклайны в гугл таблицах (GS15)

Итак, к делу.

Сначала сделаю заготовку с задачами. Здесь будет список задач и выпадающий список - "Сделано", "В работе".

Делаем проверку данных для простого использования (создания выпадающего списка):

Список прописываем через запятую.

Заготовка под спарклайн:

Сейчас он считает кол-во задач в статусе Сделано и делит на общее кол-во задач. Получает % общего выполнения. В опциях прописываем тип Шкала и ставим максимальное значение 100%.

Теперь цвета:

Здесь есть два варианта - switch и ВПР. Мне проще пользоваться ВПРом, к его синтаксису я больше привык, поэтому возьму его.

Что нужно сделать - нужно внутри опции прописать ВПР, внутри ВПРа собрать сортированный массив с значениями % и цветами и прописать в конце ВПРа единицу, чтобы он адекватно работал с сортированным массивом.

И еще пример для зеленого:

Текст формулы:

=SPARKLINE(countifs(B3:B7,"Сделано")/counta(B3:B7),{"charttype","bar";"max",1;"color1",VLOOKUP(countifs(B3:B7,"Сделано")/counta(B3:B7),{{0%;25%;50%;75%},{"red";"yellow";"green";"pink"}},2,1)})

Для наглядности - вот так выглядит внутренний массив с % и цветами:

Ссылка на таблицу:

https://docs.google.com/spreadsheets/d/1uU53nws2r-fe1R-wse4D...

Показать полностью 7
89

Спарклайны в гугл таблицах (GS15)

Привет, дорогие чатлане!

Продолжаем тему мануалов по гугл таблицам. Недавно делал новые дашборды для отдела продаж и решил поделиться темой спарклайнов, тем более что в ГТ они встраиваются совсем иначе чем в экселе.

Что такое спарклайн? Просто говоря - это график в ячейке. В екселе для них есть относительно удобный конструктор, а у нас - отдельный язык запросов =) . Ну, не время расстраиваться.

Вот самый простой вид спарклайна:

Массив численных значений, формула, все готово.

Однако спарклайны бывают других видов и их можно относительно тонко настраивать.

Первое - вид спарклайна. Есть четыре charttype:

1 - Линия (это то что на скрине)

2 - Столбцы

3 - Винлосс график

4 - Шкала.

Чтобы поменять тип спраклайна нужно дописать опцию. Делается это следующим аргументом в фигурных скобках и через запятую.

Это тип графика шкала. Если мы хотим, например, поменять цвета - ставим ; внутри фигурных скобок и прописываем значения для color1 и color2. Подойдут как названия на английском, так и хекс (https://colorscheme.ru/html-colors.html):

С помощью параметра max можно указать максимальное значение (минимальное - нельзя), а с помощью параметра rtl - центрирование по правому или левому краю.

Аналогично для графиков по двум осям:

Вместо max - здесь xmax и ymax (здесь есть минимальные значения). Верхняя строка - ось Х, нижняя - ось Y.

И аналогично для колонок и винлоса:

Только здесь больше заморочек с цветами - можно отдельно указывать цвет колонки если она отрицательная - color или положительная - negcolor. (В документации опечатка и они пишут colour - этот вариант не работает. Скрин ниже).

Ниже запись как в документации (не рабочая).

В остальном по документации все ок. Вот ссылка на нее: https://support.google.com/docs/answer/3093289?hl=en-GB

Ссылка на док: https://docs.google.com/spreadsheets/d/1uU53nws2r-fe1R-wse4D...

Показать полностью 7
Отличная работа, все прочитано!