- Работа с листами — Microsoft Excel VBA
- Видеокурсы по Excel
- 1. Выберите лист
- 2. Добавить лист
- 3. Переименовать лист
- 4. Удалить лист
- 5. Проверьте количество листов
- 6. Найти имена листов
- 7. Лист прокрутки
- 8. Написанный список из листов
- 9. Переключено на другую книгу
- Контент
- Если
- Павел Ласбк — автор сайта
- Комментарии
- Ворел
- Павел Ласбак
- Внт сбежал
- Павел Ласбак
- Дэвид
- Павел Ласбак
- Мартин
- Павел Ласбак
- Мартин
- Мартин
- Стэнли
- Стэнли
- Мартин
- Петр Печбек
- Павел Ласбак
- Карел Кинцл
- Джон
- Павел Ласбак
- Майкл
- Тереза
- Двор
- Двор
- Павел Куделка
- Збыги
- Збыги
- Войтах
- но
- ПолЛасак
- Радек
Работа с листами — Microsoft Excel VBA
Видеокурсы по Excel
В сотрудничестве с SEDUO я создал несколько видеокурсов:
- Как работать с Excel – научитесь эффективно использовать Excel – самый популярный ( рейтинг 97 %, более 13 000 студентов, + 750 положительных отзывов ) – Получить курс
- MaxiCourse Excel – получите лучшую работу, больше денег, станьте незаменимым ( более 6 часов просмотра, 160 уроков ) – Получить курс
- G-таблицы. — если не нравится Excel, воспользуйтесь курсом на Google-таблицах
Основные макросы (VBA) для работы с таблицами в Microsoft Excel.
Добавлено и дополнено: 22.12.2013
Эта статья служит быстрой помощью при программировании на VBA, когда вы работаете с листами и вам нужно вставить код. Он разделен на несколько разделов:
1. Выберите лист
Команда выбирает этот лист с именем Лист3
Листы(«Лист3»).Выберите ‘или Листы(3).Выберите Рабочие Листы(«Лист3»).Выберите Рабочие Листы(1).Выберите
Выбрать несколько листьев
Выбрать все листы:
Выбрать лист — значение в переменной (ячейке)
SheetName = «Sheet3» Sheets(SheetName).Выберите ‘, если имя находится в ячейке A1 Sheets(Range(«A1»).value).Select
Выбрать листы по положению:
ActiveSheet.Выбрать рабочие листы(1).Выбрать диаграммы(1).Выбрать листы(1).Выбрать
Другие статьи по теме
2. Добавить лист
Лист появится с автоматически добавленным именем листа. Лист добавляется перед активным листом.
Новый лист появится под выбранным вами именем. Он добавляется перед активным листом.
Sheets.Add.Name = «Мое имя»
Добавление листа после последнего листа.
Sheets.Add(After:=Sheets(Sheets.Count)).Name = «Мое имя»
Примечание: Если имя листа уже существует, оно заканчивается ошибкой. Не забывайте эти состояниялечить.
3. Переименовать лист
Команда переименовывает Лист4 в НовоеИмя
.
Активный лист будет переименован в: другое имя
ActiveSheet.Name = «другое имя»
Согласно листу. Листья следуют друг за другом, независимо от их имен.
Листы(1).Name = «Новое имя»
Примечание. Лист или его позиция должны существовать, иначе произойдет ошибка.
4. Удалить лист
Удаляет выбранные листы.
Если вы не хотите, чтобы отображалось диалоговое окно, информирующее вас о том, что на листах могут быть данные, которые вы потеряете, просто включите, чтобы не отображать информационные окна. После удаления не забудьте включить дисплей 😉
Примечание: Надеюсь, понятно, что вы не удаляете последний лист. Excel должен содержать хотя бы один лист.
5. Проверьте количество листов
Эта команда находит количество листов в рабочей книге MS Excel. Значение хранится в NoveNamecountList
.
6. Найти имена листов
Как называется первый лист?
‘ Имя листа хранится в переменной nameSheet
nameSheet = Sheets(1).Name
или узнать имя активного листа
SheetName = ActiveSheet.NameSheetName = Application.ActiveWorkbook.ActiveSheet.Name
7. Лист прокрутки
Перемещение активного листа в конец
Переместите «Лист1» за лист «Лист3».
Переместите «Лист15» перед листом «Лист13».
Перейти к первому листу
8. Написанный список из листов
В столбце A запишите все имена листов в книге:
Private Sub CommandButton1_Click() For i = 1 To Sheets.Count Cells(i, 1) = Sheets(i).Name Next i End Sub
Примечание: показывать скрытые и суперскрытые листы 🙂
9. Переключено на другую книгу
Команда «активирует» другую книгу MS Excel с именем sesit-1.xls
Контент
Этот текст служит вспомогательным средством для программирования на языке VBA (VisualБазовый для приложения). Он не претендует на то, чтобы быть исчерпывающим руководством. Можете ли вы придумать другие места для работы с листьями? Вы можете спросить об этом в комментариях.
Статья обновлена: 19.09.2020 11:07
Если
Помог ли этот веб-сайт сэкономить вам время и деньги? Помог ли он решить проблему? Готовы ли вы предоставить символическое вознаграждение за дальнейшее развитие? Выберите форму вознаграждения, которая вам подходит.
Павел Ласбк — автор сайта
Microsoft Office (Word, Excel, Google Sheets , PowerPoint) Я использую с 2000 года (с 2004 года в этом домене) — В 2017 году я получил престижную награду MVP от Microsoft (пока я единственный из IR в категории Excel). Я также делюсь своими знаниями и опытом онлайн в видеороликах для SEDUO . В компаниях преподаю и консультирую , работаю в МУНИ. Я создаю этот сайт более 15 лет. Существует более 1000 бесплатных инструкций, советов и рекомендаций, включая более 250 различных шаблонов и рабочих книг.
Комментарии
Ворел
Добавлено: 09.05.11 22:32
Спасибо за упомянутый код, чего-то я даже не знал, так что я снова умнее, но я нигде не могу найти, как проверить, есть ли запись в открытой тетради. List5, а если нет, то как изящно с этим справиться (например, если не List5, то напишите сообщение, что List5 не является Else, активируйте List5 End If. Я собрал их вместе, но он останавливается на ошибке 9. У меня есть Office 2007 и XP. Спасибо в заранее за помощью.
Павел Ласбак
Добавлено: 10.05.11 17:42
К Ворелу: узнать количество листов:
count of Sheets = Sheets.Count
и через цикл по i = 1 узнать количество листов Название листа:
Name of Sheets = Sheets(i).Name
no, а затем применить условие if .
Внт сбежал
Добавлено: 16.01.12 16:23
Здравствуйте, я хотел спросить, есть ли какая-нибудь формула или другой способ установитьна один лист, чтобы на него автоматически копировались данные с других листов. Нам нужно иметь 5 листов и один лист с именем All, и мне нужно, чтобы данные с листов 1-5 были скопированы на лист All. Спасибо за ответ
Павел Ласбак
Добавлено: 16.01.12 18:30
К Vőt Pchal: Вам нужно, чтобы все добавлялось в лист сразу после ввода значения в лист 1 — 5? Через событие «изменить» Private Sub Worksheet_Change(ByVal Target As Range) MsgBox «Добавить код». Конец подписки
Дэвид
Добавлено: 15.04.12 23:20
Здравствуйте, хотелось бы совета. У меня есть длинный список данных, в котором у меня есть различные данные (диспоузеры). Для каждого менеджера (x разных менеджеров — формат данных текстовый. При этом у каждого менеджера может быть больше записей в таблице) мне нужно создать отдельный лист и скопировать свои данные, включая первую строку и фильтр. После завершения операции удалите исходные данные (весь лист). Подскажите, пожалуйста, какой-нибудь код VBA? Заранее большое спасибо за помощь. DAvid
Павел Ласбак
Добавлено: 16.04.12 17:50
Дэвиду: попробуйте использовать информацию с: http://office.lasakovi.com/excel/vba-listy-bunky/radky-sloupce-excel-vba-kody/
Мартин
Добавлено: 23.12.12 10:24
Здравствуйте, Есть ли способ узнать имена всех листов в книге и записать их в список, может быть, на другом листе? я думаю
Павел Ласбак
Добавлено: 23.12.12 19:18
Мартину: Например, бывает вот так. Для CommandButton1: Private Sub CommandButton1_Click() Columns(1).Insert For i = 1 To Sheets.Count Cells(i, 1) = Sheets(i).Name Next i End Sub Примечание: показывать как скрытые, так и сверхскрытые листы 🙂 Понятно?
Мартин
Добавлено: 23.12.12 21:56
Да, спасибо. Наконец, я написал процедуру, но даже если процедура запускается, она выдает сообщение об ошибке. Завтра попробую ваш метод.
Мартин
Добавлено: 01.09.13 19:56
Добрый день. Так что в итоге я использовал ваш метод, просто пропустив вставку нового столбца «(Столбцы (1). Вставить)». В любом случае, я хотел бы поблагодарить вас за этот сайт. Это первое место, куда я обращаюсь за помощью или просто за вдохновением. Так что СПАСИБО.
Стэнли
Добавлено: 21.02.13 14:14
Здравствуйте, у меня возникла проблема, и я не знаю, куда обращаться. Мне нужно добавить новый лист в книгу — я решил это. Но в последствии мне нужно было бы поставить этот лист на не то место, например, у меня есть листы с именами 152 и 156 и я добавил в рабочую книгу лист 154. Теперь хотелось бы как-то получить этот лист на свое место, т.к. он автоматически приходит ко мне как первый лист. Как директор я хотел бы использовать лист с пометкой 156, потому что после листа с пометкой 152 есть еще лист «152 — данные». Я нашел в Интернете решение, которое способно разместить его в конце книги даже по последним добавленным листам (а не по их именам). Вы можете что-нибудь придумать? Заранее спасибо.
Стэнли
Добавлено: 21.02.13 16:07
Итак, я нашел этот код, который делает это для меня: Sub SortWorksheets() Dim N As Integer Dim M As Integer Dim FirstWSToSort As Integer Dim LastWSToSort As Integer Dim SortDescending As Boolean SortDescending = False If ActiveWindow.SelectedSheets.Count = 1 Then ‘Измените 1 на рабочий лист, который вы хотите отсортировать первым FirstWSToSort = 1 LastWSToSort = Worksheets.Count Else With ActiveWindow.SelectedSheets For N = 2 To .Count If .Item(N — 1).Index <> .Item(N).Index — 1 Then MsgBox «Вы не можете сортировать несмежные листы» Exit Sub End If Next N FirstWSToSort = .Item(1).Index LastWSToSort = .Item(.Count).Index End With End If For M = FirstWSToSort To LastWSToSort For N = M To LastWSToSort Если SortDescending = True Then If UCase(Worksheets(N).Name) >UCase(Worksheets(M).Name) Then Worksheets(N).Move Before:=Worksheets(M) End If Else If UCase(Worksheets(N).Name)
Мартин
Добавлено: 30.08.13 13:29
Добрый день. Мне нужен совет. Использую работу с несколькими книгами, иногда даже создаю их в макросе. Если я работаю в одной рабочей книге, все в порядке, но когда я создаю вторую и переключаюсь между Windows(. ).Activate или Workbook(. ).Activate, возникает проблема, когда я все еще могу выбрать данный лист, но когда я выбрать ячейки на выбранном листе, я больше не могу использовать Range(. ).select , но мне нужно написать ActiveSheet.Range(. ).select . Я понятия не имею, почему, так что, возможно, я не делаю что-то неправильно. Меня это очень раздражает, и даже иногда (хотя я не знаю почему) мне приходилось писать что-то вроде Range(cells(1,1).address,cells(1,2).address).select
Петр Печбек
Добавлено: 30.12.13 14:25
ad Vorel (без цикла): Sub ExistenceListu() Dim List As Worksheet On Error Resume Next Set List = ActiveWorkbook.Sheets(«Sheet5») ListExists = Not List Is Nothing End Sub ad Martin (30.8.): Ошибка заключается в том, что VBA является доброжелательным и не требует указания родителей для диапазона и ячеек. Таким образом, вы можете определить рабочую книгу перед Range сто раз, но если вы не сделаете то же самое внутри для Cells, то ActiveSheet будет установлен. Кстати, определите рабочую книгу или диапазон ячеек как переменную объекта, и в 90% случаев вам вообще не придется решать никаких Активировать, Выбрать. Также нет необходимости тянуться за коллекцией Windows.
Павел Ласбак
Добавлено: 30.12.13 16:27
Петру Пехбику: спасибо за публикацию элегантного кода для проверки существования листа. И ответь за Мартина.
Добавлено: 24.02.14 23:40
Sheets.Add(After:=Sheets(Sheets.Count)).Name = Range(«B3») берет имя листа из B3, но если лист уже существует, при заполнении выдает ошибку в диалоговом окне что лист уже существует существует ли он и хочу ли я егопереписать? заранее спасибо
Карел Кинцл
Добавлено: 03.06.14 15:04
Здравствуйте, Ваш сайт мне очень помогает, но мне все еще нужна непосредственная помощь с одной проблемой, с которой я столкнулся. Это в принципе простая вещь, но я почему-то не могу ее решить. Мне нужна помощь VBA, чтобы связать две книги вместе, чтобы я мог передавать данные между ними. Я открываю книгу с помощью Connections.AddFromFile, но всегда появляется таблица для выбора листа из открытой книги, и я не могу предварительно определить данную таблицу. Спасибо за любой совет.
Джон
Добавлено: 17.04.14 08:58
В открывшемся окне напишите «Дополнительно и расширено: 22.12.2014». Это, наверное, небольшая ошибка, не так ли? Декабрь этого года.
Павел Ласбак
Добавлено: 17.04.14 20:56
To Honza: Это было в декабре 2011 года, я изменил год. Я понимаю.
Майкл
Добавлено: 24.06.14 17:10
Здравствуйте, я столкнулся с довольно простой задачей — перемещением листа между двумя разными книгами. Как только я попадаю в положение, когда лист должен быть скопирован из одной книги в другую, происходит сбой и пишет ошибка времени выполнения «9», нижний индекс вне диапазона. Private Sub CommandButton1_Click() Dim s As String Dim ss As String MsgBox («Выбор файла — отчет о производительности») s = Application.GetOpenFilename() Workbooks.Open s MsgBox («Выбор файла — Workbook») ss = Application.GetOpenFilename() Workbooks.Open ss Workbook(s).Sheets(2).Copy Before:=Workbooks(ss).Sheets(1) ‘Это не работает даже с введенным вручную полным путем и именем файла, см. следующие строки ‘Workbooks(«C . отчет об эффективности (20 недель).xlsx»).Листы(1) КонецПод
Тереза
Добавлено: 13.10.14 13:08
Здравствуйте, я хотел бы спросить, возможно ли объединить отдельные листы в один основной лист в Excel. Я борюсь с большим количеством листов в одном Excel, и было бы очень полезно, если бы он мог создать мастер-лист, в который вы могли бы переместить несколько листов. Например основной лист, отмеченный как реализация проекта, по которому можно было щелкнуть, и все листы, связанные с ним, были бы найдены в нем. Заранее большое спасибо за ответ.
Двор
Добавлено: 30.12.14 08:08
Михалу Вот как это должно работать. Private Sub CommandButton1_Click() MsgBox («Выбрать файл — отчет о производительности») Workbooks.Open Filename:=»C:\Users\raska\Documents\_testy_\оценки смены\рабочие записи (20 недель).xlsx » MsgBox («Выбрать файл — рабочие записи») Workbooks.Open Filename:=»C:\Users\raska\Documents\_testy_\оценки смен\отчет о производительности (20 недель).xlsx» Workbooks(«рабочие записи (20 недель).xlsx») .Sheets (2).Копировать до:=Workbooks(«отчет о производительности (20 недель).xlsx»).Sheets(1) End Sub
Двор
Добавлено: 30.12.14 09:27
Это Тереза, к сожалению, это не работает, как вы думаете, но не отчаивайтесь, у меня могут быть хорошие новости о том, как решить вашу проблему. Это можно было бы решить способом содержания книги с быстрой ссылкой непосредственно на конкретный лист. Создайте лист реализации проекта, щелкните в нем ячейку и выберите Вставить/Гипертекст на верхней панели. и откроется окно Редактировать гиперссылку. В левой части этого окна есть ссылка Выбрать место в этом документе здесь. Правая сторона изменится, и вы можете выбрать здесь конкретный лист, который относится к этому конкретному проекту, и нажать «ОК». Ссылка на лист была создана на листе реализации проекта, и когда вы щелкнете по ней, вы переместитесь на этот конкретный лист и в конкретную ячейку. Вот как вы можете создавать содержимое для проектов.
Добавлено: 01.02.15 07:28
Для Терезы — после вставки пустого листа запустите этот код (он будет делать то, что Jarda написал для всех листов) Sub CreateLinksToAllSheets() ‘Создает ссылку на все листы Dim Sh As Worksheet Dim cell As Range For Each Sh In ActiveWorkbook.Worksheets Если ActiveSheet.Name <> Sh.Name Затем ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:=»», SubAddress:= _ «‘» & Sh.Name & «‘» и усилитель; «!A1», TextToDisplay:=Sh.Name ActiveCell.Offset(1, 0).Выберите End If Next Sh End Sub
Павел Куделка
Добавлено: 01.04.15 17:06
Добрый день. Я запрограммировал кнопку, которая копирует данное письмо в другой блокнот. Мне нужно было бы организовать копирование письма без этой кнопки. Спасибо.
Добавлено: 01.05.15 08:57
Этот Павел Куделка: — это должно быть к чему-то привязано: например, при открытии/закрытии файла, активации/деактивации листа/окна, изменении листа, изменении или выборе ячейки, при определенном значении в определенная ячейка и т. д.
Добавлено: 14.01.15 12:33
Здравствуйте, спасибо за отличный сайт, который мне много раз помогал. Однако теперь я не знаю, что делать. Я работаю с Excel, который имеет 12 листов. Я создал еще один «вводный» лист, на котором поставил галочки с названиями 12 листов. Теперь мне нужно иметь возможность выбрать данные листы с помощью флажков и с помощью кнопки (Создать и сохранить) создать новый файл, в который будут вставлены и сохранены только выбранные листы. Данные в новом файле также должны быть заблокированы от перезаписи. Буду благодарен за любой совет, спасибо
Збыги
Добавлено: 23.05.15 19:26
Мне нужен совет, мне нужно отделить этот код A1- это ссылка на ячейку, где находится номер листа, который я создал до Sheets(«A1»). Выберите 100%, это неправильно, но я не знаю, как это написать.
Збыги
Добавлено: 24.05.15 11:03
Здравствуйте, мне нужносовет, этот сайт мне очень помог, и теперь я застрял на возможно простой проблеме. эта команда Sheets(«List3»). Выберите Мне нужно заменить Sheet3, где я не знаю имя раньше, но я знаю, что имя листа хранится на начальном листе и в ячейке A1
Добавлено: 26.05.15 08:08
Збиги: — Выберите лист в соответствии со значением в ячейке Sheets(Range(«A1»).value).Select
Войтах
Добавлено: 01.07.16 12:30
Я хотел бы задать любительский вопрос. Мне нужно создать новые листы с именами ячеек таблицы. пример содержимого ячейки A1 = «01» — создать лист «01» содержимое ячейки A2 = «02» — создать лист «03» У меня есть один лист в качестве шаблона, который я копирую и переименовываю. Листы(«узор»).Выбрать Листы(«узор»).Копировать до:=Листы(1) Листы(«узор (2)»).Выбрать Листы(«узор (2)»).Имя = (Диапазон(» A1″).Value) Но мне нужно, чтобы значение исходной ячейки увеличилось на +1 . (А1,А2,А3.)
но
Добавлено: 11.01.16 20:33
Привет всем! Кажется, я не могу собрать воедино или найти макрос, который будет перемещать активный (выбранный) лист впереди или позади следующего/предыдущего листа с помощью двух кнопок на листе. Листы в книге могут иметь разные имена и их может быть разное количество, поэтому я не могу уловить конкретных имен. Структура книги заблокирована, поэтому мне нужны кнопки на электронной таблице, которые создаются другим макросом. Для кнопки, например, «переместиться вперед» — что-то вроде: ActiveSheet.Move After:= «для следующего листа» и т.д.. Что-то я не могу собрать эту чушь воедино. Всем спасибо за советы!
Добавлено: 19.04.16 10:50
Привет, я хотел бы, чтобы вы сделали макрос для кнопки, переход к следующему/предыдущему (боковому) листу. Я нахожусь на одном листе и хочу посмотреть следующий/предыдущий лист, поэтому у меня должны быть эти кнопки вверху, и я мог бы легко перемещаться между листами. У кого-нибудь есть идеи? я думаю
ПолЛасак
Добавлено: 06.02.16 20:23
Петру: Не лучше ли использовать гиперссылку?
Радек
Добавлено: 11.08.16 11:01
Здравствуйте. Я новичок в программировании макросов и хотел бы получить совет о том, как писать код. Когда я пишу имя в ячейке A1, я хочу, чтобы Sheet1 автоматически переименовывался. То же самое в салоне А2, А3 и т.д. Спасибо за помощь