Данная команда не применима для нескольких фрагментов excel
Допустим у Вас есть книга с n-ным количеством однотипных листов. Иногда приходится проделывать в каждом листе одну и ту же операцию(к примеру написание заголовков). Чаще всего в таких случаях проделывается следующая операция: на одном листе меняются заголовки, затем копируются и поочередно вставляются на остальные листа. Это долго, нудно и неинтересно. Благо разработчики Microsoft предвидели подобные мучения и снабдили Excel средством для более быстрого осуществления этой задачи.
Итак, для произведения одинаковых изменений сразу на нескольких листах все, что необходимо сделать, это выделить все необходимые листы с зажатой клавишей Shift или Ctrl(зависит от расположения листов, данные в которых надо менять. Ctrl позволяет выделить несмежные листы(скажем через один), а с Shift выделяются все листы от первого выделенного до последнего). Выделили. Теперь все действия, производимые на активном(видимом) листе в точности повторяется на других выделенных листах. И что не менее важно - если прописать в активном листе формулу, то ссылки на других листах будут у каждого свои, т.е. ссылаться формулы будут на тот лист, в котором написаны(если в формуле не указаны явно ссылки на другие листы). То же самое и с копированием. Если на одном листе в ячейке А1 написано Дом, а на другом Холм, то при копировании ячейки А1 на активном листе и вставки её в ячейку А2 , то на каждом листе в ячейку А2 будет скопировано своё значение - Дом и Холм соответственно.
Подобная работа с листами еще называется работой с группой листов. Определить, что на данный момент выделена группа листов(и изменения будут производиться на всех этих листах) очень просто - в заголовке Excel будет отображен текст: [Группа] [Groupe]
Разгруппировать такие листы еще проще:
- если в группу объединены не все листы - выделить любой лист вне группы
- если в группе все листы книги - выделить любой лист, который на данный момент не является активным
Так же см.:
[[Как одновременно просматривать информацию с нескольких листов/диапазонов?]]
В Word мы можем выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?
При таком коде копируется только второй фрагмент (между "р2" и "р3")
Sub Выписка()
Dim r
Set r = ActiveDocument.Range
With r.Find
.ClearFormatting
.Text = "ОАО*р1"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
If .Execute Then
ActiveDocument.Range(r.Start + 0, r.End - 2).Select
Selection.Copy
Else
MsgBox "Текст не найден!", vbExclamation
End If
End With
With r.Find
.ClearFormatting
.Text = "р2*р3"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
If .Execute Then
ActiveDocument.Range(r.Start + 3, r.End - 3).Select
Selection.Copy
Else
MsgBox "Текст не найден!", vbExclamation
End If
End With
Documents.Add
Selection.Paste
Selection.TypeBackspace
ChangeFileOpenDirectory "D:\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="Выписка_" & DocNum & ".doc"
ActiveDocument.Close
В Word мы можем выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?
При таком коде копируется только второй фрагмент (между "р2" и "р3")
Sub Выписка()
Dim r
Set r = ActiveDocument.Range
With r.Find
.ClearFormatting
.Text = "ОАО*р1"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
If .Execute Then
ActiveDocument.Range(r.Start + 0, r.End - 2).Select
Selection.Copy
Else
MsgBox "Текст не найден!", vbExclamation
End If
End With
With r.Find
.ClearFormatting
.Text = "р2*р3"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
If .Execute Then
ActiveDocument.Range(r.Start + 3, r.End - 3).Select
Selection.Copy
Else
MsgBox "Текст не найден!", vbExclamation
End If
End With
Documents.Add
Selection.Paste
Selection.TypeBackspace
ChangeFileOpenDirectory "D:\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="Выписка_" & DocNum & ".doc"
ActiveDocument.Close
В Word мы можем выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?
При таком коде копируется только второй фрагмент (между "р2" и "р3")
Sub Выписка()
Dim r
Set r = ActiveDocument.Range
With r.Find
.ClearFormatting
.Text = "ОАО*р1"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
If .Execute Then
ActiveDocument.Range(r.Start + 0, r.End - 2).Select
Selection.Copy
Else
MsgBox "Текст не найден!", vbExclamation
End If
End With
With r.Find
.ClearFormatting
.Text = "р2*р3"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
If .Execute Then
ActiveDocument.Range(r.Start + 3, r.End - 3).Select
Selection.Copy
Else
MsgBox "Текст не найден!", vbExclamation
End If
End With
Documents.Add
Selection.Paste
Selection.TypeBackspace
ChangeFileOpenDirectory "D:\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="Выписка_" & DocNum & ".doc"
ActiveDocument.Close
В Word мы можем
выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?
В частности, как раз нельзя программно выделить несколько диапазонов, только через пользовательский интерфейс и только при помощи мышки и Ctrl (только одной клавиатурой тоже нельзя). При этом диапазон Selection.Range будет ссылаться только на один последний выделенный фрагмент. С самим же Selection, выделенным заранее вручную, можно программно выполнить ряд привычных действий: изменение шрифта, копирование, поиск и т.п.
В Word мы можем
выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?
В частности, как раз нельзя программно выделить несколько диапазонов, только через пользовательский интерфейс и только при помощи мышки и Ctrl (только одной клавиатурой тоже нельзя). При этом диапазон Selection.Range будет ссылаться только на один последний выделенный фрагмент. С самим же Selection, выделенным заранее вручную, можно программно выполнить ряд привычных действий: изменение шрифта, копирование, поиск и т.п. Gustav
В Word мы можем
выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?
В частности, как раз нельзя программно выделить несколько диапазонов, только через пользовательский интерфейс и только при помощи мышки и Ctrl (только одной клавиатурой тоже нельзя). При этом диапазон Selection.Range будет ссылаться только на один последний выделенный фрагмент. С самим же Selection, выделенным заранее вручную, можно программно выполнить ряд привычных действий: изменение шрифта, копирование, поиск и т.п. Автор - Gustav
Дата добавления - 01.05.2016 в 10:01
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Симптомы
Эта операция требует одинакового размера объединенных ячеек.
Причина
Эта проблема может возникнуть при сортировке диапазона ячеек, а также при выполнении следующих условий:
- Вы ранее объединили некоторые ячейки, но не все ячейки в диапазоне сортировки.
- Вы ранее объединили все ячейки в диапазоне сортировки, но не все ячейки имеют одинаковый размер.
Обходной путь
Чтобы решить эту проблему, разделите или объедините все объединенные ячейки в диапазоне, чтобы они имели одинаковый размер. Каждая объединенная ячейка в диапазоне должна занимать одинаковое количество строк и столбцов, что и другие объединенные ячейки в диапазоне.
Общее решение
Выберите весь диапазон, который следует сортировать.
В группе Выравнивание на вкладке Главная нажмите кнопку вызова диалогового окна Выравнивание.
Выберите вкладку Выравнивание, а затем снимите флажок Объединить ячейки.
Нажмите ОК.
Это может изменить расположение данных в диапазоне.
Пример решения
Введите следующие данные на листе:
Объедините ячейки A1 и B1, A2 и B2, а также A3 и B3. Для этого выполните следующие действия:
Выделите каждую пару ячеек.
Выберите вкладку Выравнивание, а затем установите флажок Объединить ячейки.
Нажмите ОК.
Не объединяйте ячейки в столбце C.
Выделите ячейки A1:C3, затем выберите Сортировка и фильтр в группе Редактирование на вкладке Главная, а затем нажмите Настраиваемая сортировка.
Для решения этой проблемы воспользуйтесь одним из указанных ниже способов:
Функция СМЕЩ часто пугает неискушенного пользователя наличием аж пяти аргументов и непонятным назначением. Но в Excel часто встречаются задачи, в которых она проявит себя с самой лучшей стороны и станет незаменимым помощником. Например, когда Вам нужно:
1) Сделать зависимый выпадающий список, в который можно добавлять данные;
2) Добиться того, чтобы новые строки сразу попадали в сводную таблицу при обновлении;
3) Отображать на графике только данные за последние 7 дней, причем новые данные вносятся ежедневно;
4) В списке помесячных продаж за год мгновенно подсчитать сумму с января по март, а потом с февраля по апрель, а потом с сентября по декабрь.
5) В новом столбце сослаться на каждую пятую ячейку соседнего столбца
Как видите, задачи интересные и нетривиальные. Если Вы хотите научиться их решать в два счета, то стоит уделить несколько минут изучению функции СМЕЩ.
Синтаксис и алгоритм работы функции
Функция СМЕЩ умеет возвращать ссылку на диапазон заданного размера (высота и ширина), отстоящий от стартовой ячейки на заданное число строк и столбцов.
Функция имеет следующий синтаксис:
Как видите, у неё есть 5 аргументов:
1) " Ссылка ". Обязательный аргумент. Указывает стартовую ячейку, от которой будет происходить смещение. Здесь можно указать ссылку на ячейку или на диапазон ячеек. Во втором случае смещение будет считаться от левой верхней ячейки диапазона;
2) " Смещ_по_строкам ". Обязательный аргумент. Указывает, на сколько строк нужно сместиться от заданной ячейки. Положительные числа означают смещение вниз, отрицательные - вверх, ноль - без смещения;
3) " Смещ_по_столбцам ". Обязательный аргумент. Указывает, на сколько столбцов нужно сместиться от заданной ячейки. Положительные числа означают смещение вправо, отрицательные - влево, ноль - без смещения;
4) " Высота" . Необязательный аргумент. Высота в строках возвращаемого диапазона. Если опустить - высота будет равна высоте диапазона, указанного в аргументе "Ссылка";
5) " Ширина" . Необязательный аргумент. Ширина в строках возвращаемого диапазона. Если опустить - ширина будет равна ширине диапазона, указанного в аргументе "Ссылка".
На рисунке ниже представлен алгоритм работы.
1) В качестве "Ссылки" задана ячейка B2.
2) От нее происходит смещение на 2 строки вниз (так как число 2 положительное). Мы оказываемся в ячейке B4.
3) Из ячейки B4 происходит смещение на 3 столбца вправо (так как число 3 положительное). В итоге мы попадаем в ячейку E4.
4) Принимая ее за верхнюю левую, выделяем диапазон из 3 строк и 4 столбцов. Результат - диапазон E4:H6.
Данные, расположенные в ячейке или в диапазоне ячеек, можно перемещать с одного места рабочего листа в другое, используя как прямое перетаскивание мышью, так и кнопки на вкладках ленты, контекстное меню, а также процедуры (макросы) – программы, написанные на языке Visual Basic for Application, сокращенно VBA.
Перемещение с помощью мыши
Простейший способ переместить ячейки с места на место – использовать манипулятор мыши. Для перемещения ячейки на новое место, необходимо выделить нужную ячейку или диапазон, навести курсор мыши на границу выделенного диапазона, чтобы курсор стал наклонной стрелкой с крестиком, как показано на рисунке и при нажатой левой кнопке мыши, перетащить выделенную область на новое место и после этого отпустить кнопку мыши. Если при наведении курсора мыши на границу выделенного диапазона он не превращается в наклонную стрелку с крестиком и делает невозможным перетаскивание ячеек, значит, отключена специальная настройка и ее необходимо включить, щелкнув в верхнем левом углу программы по кнопке «Office» и перейдя в Параметры Excel/Дополнительно. В группе «Параметры правки» необходимо установить флажок возле пункта «Разрешить маркеры заполнения и перетаскивание ячеек».
Вырезать и вставить
Для переноса ячеек наряду с их перемещением мышью используется вырезание с последующей вставкой. Для того чтобы вырезать/вставить ячейку или диапазон ячеек, необходимо последовательно выбрать команду «Вырезать», переместить курсор на новое место и выбрать команду «Вставить». Для этого можно использовать контекстное меню (меню, которое появляется при нажатии правой кнопки мыши в области выделенного участка), группу «Буфер обмена» на вкладке «Главная» или горячие клавиши (сочетание клавиш на клавиатуре, за которыми закреплена та или иная команда).
Сочетание клавиш для вырезания – Ctrl+X или Shift+Delete. Сочетание клавиш для вставки – Ctrl+V или Shift+Insert.
Кроме того, ячеек может быть настолько много, что перенос их вручную может превратиться в кошмар. Другой проблемой, которая может возникнуть при переносе ячеек с места на место, может оказаться сам поиск необходимых для перемещения ячеек. Для наглядности рассмотрим такой пример: необходимо разнести по разным столбцам ячейки, в зависимости от их значений.
Все эти и аналогичные задачи легко решаются при помощи надстройки для Excel.
Надстройка для быстрого перемещения ячеек
Для быстрого переноса ячеек с одного места в другое создана надстройка для Excel, а кнопка, запускающая эту надстройку выводится на отдельную вкладку ленты Excel либо на отдельную панель инструментов (в зависимости от версии Excel). Нажатие кнопки вызывает диалоговое окно, в котором пользователь может выбрать нужные ему условия, значения, диапазоны, направление перемещения и так далее.
Перемещение производится автоматически при помощи макроса. В вышеприведенном примере были применены следующие условия: найти все ячейки с числовыми значениями, содержащими "3100" и переместить их на 1 столбец влево и на 1 строку вверх.
1. одним кликом мыши вызывать диалоговое окно макроса прямо из панели инструментов excel;
2. задавать искомое значение для ячеек;
3. задавать диапазон для поиска;
4. выбирать одно из двенадцати условий для значений ячеек;
5. определять направление перемещения для ячеек, удовлетворяющих заданным условиям и значениям:
а) перемещать ячейки на заданное количество строк вверх или вниз;
б) перемещать ячейки на заданное количество столбцов влево или вправо;
Читайте также: