Множественная вставка в несмежные ячейки некоторой формулы

Автор eeigor, 22 марта 2021, 23:12

0 Пользователи и 1 гость просматривают эту тему.

eeigor

#15
При решении этой задачи с использованием макросов тоже была сложность: как перебрать пустые ячейки и заполнить их. Дело в том, что из коллекции ячеек всегда удаляются пустые ячейки, и надо было организовывать несколько вложенных циклов для перебора всего и вся... Муторно и медленно.
Решение от @sokol92 (ссылка в стартовом сообщении) было тоже «трюковым».

Приведу часть решения: операция присваивания. Разом...
'   Assigns a value (formula, number, or text) to cells in a rectangular range.
Sub AssignValueToRange(oRange As Object, value)
  ' The .Formula property should cover all input needs, even numbers.
  oRange.getCellByPosition(0, 0).Formula = value  'the lead cell
  With com.sun.star.sheet.FillDirection
     oRange.fillAuto(.TO_BOTTOM, 1)  '0
     oRange.fillAuto(.TO_RIGHT, 1)  '1
  End With
End Sub
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#16
Вот так будет выглядеть лист после вставки формулы во все ячейки выделенного диапазона (A3:B20). Часть данных (те, что чёрного цвета) затёрты (см. ответ #7).
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#17
Посмотрело более 100 человек.
Не буду томить ожиданием и приведу решение.

Итак, часть данных была затёрта, но в буфере обмена остался скопированный исходный диапазон с данными и пустыми ячейками.
Не снимая выделения, открываем окно специальной вставки (Ctrl+Shift+V), устанавливаем параметр "Пропуск пустых ячеек" и жмём на кнопку "ОК". Это и был наш последний шаг. Готово.

Затёртые данные восстановлены, а формулы в ранее пустых, но теперь заполненных ячейках пересчитались, отобразив правильную информацию. Трюк?

Вот так работает множественная вставка в несмежные ячейки.
Вводить таким способом можно что угодно...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

Хорошо, чуть позже.

Я тут давно уже предлагаю соорудить "копилку" решений. От этого форум только выиграет...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#20
Итак, всё ещё раз по порядку применительно к нашему примеру:

1. Ставим курсор в ячейке A3 и выделяем диапазон A3:B20, содержащий незаполненные ячейки;
2. Выполнить команды меню: Правка (Edit) → Копировать (Copy) или нажать клавиши Ctrl+C;
3. Не снимая выделения ввести в ячейку A3 формулу со ссылкой на ячейку выше: =A2
4. Ввести введённую формулу в весь выделенный диапазон, нажав Alt+Enter;
5. Выполнить команды меню: Правка (Edit) → Специальная вставка (Paste Special) → Вставить все данные (Paste all)
или для открытия окна диалога «Специальная вставка» нажать клавиши Ctrl+Shift+V, далее → Пропуск пустых ячеек (Skip empty cells) → OK

Пояснение. Когда мы вставляем формулу в диапазон, мы затираем часть информации. Это не важно, главное – правильная формула легла в пустые ячейки. В данный момент эти пустые ячейки отображают одинаковую (неверную) информацию из-за затёртых данных (наименований категорий и подкатегорий). Но ведь мы их скопировали в буфер обмена, верно? Вставляем обратно, но – внимание: важная деталь! – только исходные данные, кроме пустых скопированных ячеек! Правильно, ведь пустые ячейки (те, что в буфере) уже заполнены нашей формулой на листе. Замещается, то есть восстанавливается, только содержание ранее непустых ячеек. А формулы, которые на них ссылаются, мгновенно пересчитываются.
Готово.

На решение этой задачи у меня "ушло"... полтора года, пока я пытался восстановить утраченную в связи с переходом с MS Excel на LO Calc функциональность.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#21
@kompilainenn, мы тут с вами два флажка откопали... Как перевели, так и понимаем. Интуитивно непонятно. Возможно, надо проинформировать тех, кто занимается адаптацией интерфейса.

Например:
«Распознавать незаполненные категории»
«Пропуск пустых ячеек в памяти» (буфере обмена данными)
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#22
Появилось время, загрузил демо-скриншоты и исправил ошибки в файле и на скриншоте, прикреплённых к ответам 14 и 16 соответственно.
Для наглядности изначально пустые ячейки отформатированы красным цветом шрифта.
К ответу 20:
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#23
К ответу 20: продолжение...
После обратной вставки на лист скопированного в буфер диапазона, но только с пропуском пустых (ранее скопированных в буфер) ячеек, которые в данный момент уже заполнены формулами на листе, "ошибки" исправляются.

Итоговый файл с 2-мя листами прикреплён. Сводная таблица обновляется вручную.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

@kompilainenn, один вопрос:
Получила ли опция "Пропуск пустых ячеек" ("Skip empty cells") окна диалога "Специальная вставка" должное описание в руководстве на русском?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

kompilainenn

Цитата: eeigor от 24 марта 2021, 08:21Получила ли опция "Пропуск пустых ячеек" ("Skip empty cells") окна диалога "Специальная вставка" должное описание в руководстве на русском?
Всё, что я перевел - доступно на этом форуме в соответствующей теме
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

#26
Да, информация есть:
«Options – sets the paste options for the clipboard contents.
Skip empty cells – empty cells from the clipboard do not replace target cells. <...>».
В переводе:
Пропуск пустых ячеек – пустые ячейки из буфера обмена не заменяют собой целевые ячейки.

Нет только примера использования.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Симпатичный прием - раньше не обращал внимание на эту опцию вставки.
Владимир.

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

#29
Ну, в Excel для решения этой задачи есть две возможности:
1) выделить пустые ячейки (скриншот) и 2) выполнить вставку в множественный диапазон (Ctrl+Enter).
Вторая задача кажется простой только на вид, но они реализовали это не сразу.
Данный приём делает это! До этого я делал то же, используя целых два "костыля": 1) SelectEmptyCells и 2) FillEmptyCells. Но решение без макросов доступнее.

Кстати, зачем была добавлена эта опция ("Пропуск пустых ячеек"), и где (как) ещё её можно применить, не опираясь на...? Есть идеи?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community