Note: The other languages of the website are Google-translated. Back to English

Как создавать новые листы для каждой строки в Excel?

Предположим, у вас есть таблица результатов с именами всех учеников в столбце A. Теперь вы хотите создать новые листы на основе этих имен в столбце A и сделать так, чтобы каждый лист содержал уникальные данные ученика. Или просто создайте новый лист только для каждой строки в таблице, не учитывая имена в столбце A. В этом видео вы получите методы для достижения этого.

Создавайте новые листы для каждой строки с кодом VBA
Создайте новые листы для каждой строки с помощью утилиты Split Data в Kutools for Excel.


Создавайте новые листы для каждой строки с кодом VBA

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

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. А затем вставьте следующий код в Модули окно.

Код VBA: создать новый лист для каждой строки на основе столбца

Sub parse_data()
'Update by Extendoffice 2018/3/2
    Dim xRCount As Long
    Dim xSht As Worksheet
    Dim xNSht As Worksheet
    Dim I As Long
    Dim xTRrow As Integer
    Dim xCol As New Collection
    Dim xTitle As String
    Dim xSUpdate As Boolean
    Set xSht = ActiveSheet
    On Error Resume Next
    xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
    xTitle = "A1:C1"
    xTRrow = xSht.Range(xTitle).Cells(1).Row
    For I = 2 To xRCount
        Call xCol.Add(xSht.Cells(I, 1).Text, xSht.Cells(I, 1).Text)
    Next
    xSUpdate = Application.ScreenUpdating
    Application.ScreenUpdating = False
    For I = 1 To xCol.Count
        Call xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
        Set xNSht = Nothing
        Set xNSht = Worksheets(CStr(xCol.Item(I)))
        If xNSht Is Nothing Then
            Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
            xNSht.Name = CStr(xCol.Item(I))
        Else
            xNSht.Move , Sheets(Sheets.Count)
        End If
        xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
        xNSht.Columns.AutoFit
    Next
    xSht.AutoFilterMode = False
    xSht.Activate
    Application.ScreenUpdating = xSUpdate
End Sub

Внимание: A1: C1 - диапазон заголовков вашей таблицы. Вы можете изменить его по своему усмотрению.

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

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

Код VBA: напрямую создавать новый лист для каждой строки

Sub RowToSheet()
	Dim xRow As Long
	Dim I As Long
	With ActiveSheet
		xRow = .Range("A" & Rows.Count).End(xlUp).Row
		For I = 1 To xRow
			Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I
			.Rows(I).Copy Sheets("Row " & I).Range("A1")
		Next I
	End With
End Sub

После запуска кода каждая строка активного рабочего листа будет помещена на новый рабочий лист.

Внимание: Строка заголовка также будет помещена на новый лист с этим кодом VBA.


Создайте новые листы для каждой строки с помощью утилиты Split Data в Kutools for Excel.

На самом деле, описанный выше метод сложен и труден для понимания. В этом разделе мы познакомим вас с Разделить данные полезности Kutools for Excel.

Перед применением Kutools for Excel, Пожалуйста, сначала скачайте и установите.

1. Выберите таблицу, которую нужно использовать для создания новых листов, и нажмите Кутулс Плюс> Плевать данные. Смотрите скриншот:

2. в Разделить данные на несколько листов диалоговое окно, сделайте следующее.

A. Для создания новых листов на основе значения столбца:

1). Пожалуйста, выберите Конкретный столбец вариант и укажите столбец, по которому вы хотите разделить данные, в раскрывающемся списке;
2). Если вы хотите назвать листы значениями столбцов, выберите Значения столбца в Правила раскрывающийся список;
3). Щелкните значок OK кнопка. Смотрите скриншот:

Б. Для непосредственного создания новых листов для каждой строки:

1). Выбрать Фиксированные строки вариант, введите номер 1 в коробку;
2). Выбрать Номера строк из Правила раскрывающийся список;
3). Щелкните значок OK кнопка. Смотрите скриншот:

создается новая книга со всеми новыми листами внутри. Смотрите скриншоты ниже.

Создание новых листов для каждой строки на основе значения столбца:

Создание нового листа для каждой строки без учета значения столбца:

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

Создайте новые листы для каждой строки с помощью утилиты Split Data в Kutools for Excel.


Лучшие инструменты для работы в офисе

Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма ...
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон...
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы... Предотвращение дублирования ячеек; Сравнить диапазоны...
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор ...
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое ...
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии...
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом ...
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF...
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
вкладка kte 201905

Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
офисный дно
Сортировать комментарии по
Комментарии (33)
Оценок пока нет. Оцените первым!
Этот комментарий был сведен к минимуму модератором на сайте
Привет, я хочу создать рабочие листы на основе моего файла шаблона Myformat и назвать их в соответствии с данными первого столбца. Я настроил код VBA следующим образом, но он генерирует слишком много пустых листов. Не могли бы вы помочь мне перестать генерировать пустые листы. Спасибо. Kumar Sub AddSheets() Затемнение ячейки как Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Установите wsWithSheetNames = ActiveSheet Установите wbToAddSheetsTo = ActiveWorkbook Для каждой ячейки In wsWithSheetNames.Range("A2:A165") С помощью wbToAddSheetsTo .Sheets. Добавить после: = ActiveSheet Sheets.Add Type: = _ "C:\Users\Dimple\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" При ошибке Возобновить следующий ActiveSheet.Name = cell.Value If Err.Number = 1004 Then Debug.Print cell.Value & "уже используется как имя листа" End If On Error GoTo 0 End With Next Cell End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,
Я всегда получаю 2 листа за уникальную запись в строке A. Есть идеи, почему? Кроме того, насколько сложно было бы добавить общее количество строк, созданных сгенерированным листом, к имени листа. Огромное спасибо! Дайте мне знать, если вы принимаете пожертвования.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, я хочу использовать мой шаблон файла exel MyFormat для создания рабочих листов и называть рабочие листы данными в первом столбце. Следующий код VBA работает нормально для создания рабочих листов в соответствии с MyFormat. Но он генерирует сотни пустых листов и в обычном шаблоне Excel. Может ли кто-нибудь помочь мне перестать генерировать лишние пустые листы. Спасибо Kumar Sub AddSheets() Затемните ячейку как Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Установите wsWithSheetNames = ActiveSheet Установите wbToAddSheetsTo = ActiveWorkbook Для каждой ячейки In wsWithSheetNames.Range("A2:A165") С wbToAddSheetsTo .Sheets .Add After:=ActiveSheet Sheets.Add Type:= _ "C:\Users\Dreamline\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" При ошибке Возобновить следующий ActiveSheet.Name = cell.Value If Err.Number = 1004 Затем Debug.Print cell.Value & «уже используется как имя листа» End If On Error GoTo 0 End With Next Cell End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Имена рабочих листов должны быть меньше или равны тридцати символов в длину.
Не очень общеизвестно, но в противном случае код выведет пустой рабочий лист «Лист №» по умолчанию.

Создайте новый рабочий лист, через который будет выполняться ваш код синтаксического анализа, и укажите ссылку на первый столбец следующим образом:
=ЕСЛИ(ИЛИ('Оригинал по ссылке'!B1<>"", ДЛСТР('Оригинал по ссылке'!B1)>30), НАЛЕВО('Оригинал по ссылке'!B1,30),'Оригинал по ссылке'!B1)


Либо скопируйте, либо сделайте ссылку на остальную часть листа, как вы можете. Убедитесь, что столбец свободен от ограничений проверки данных, если у вас есть какие-либо проблемы со ссылкой на другой лист.
Этот комментарий был сведен к минимуму модератором на сайте
Спасибо вам большое за размещение этого!!!! Работал как шарм. Можете ли вы объяснить, как работает первый набор кода?
Этот комментарий был сведен к минимуму модератором на сайте
Спасибо тебе за это!



В коде VBA есть способ назвать результирующие листы из объединенных данных первой и второй строки столбца?



поэтому для вашего примера лист 2 будет автоматически называться «Линда 100»
Этот комментарий был сведен к минимуму модератором на сайте
Дорогая Джойс,
Спасибо за ваш комментарий! Надеюсь, приведенный ниже сценарий VBA поможет вам.

Sub parse_data()
Dim xRCount As Long
Dim xSht как рабочий лист
Dim xNSht As Worksheet
Дим я пока
Dim xTRrow как целое число
Dim xCol как новая коллекция
Dim xTitle как строка
On Error Resume Next
Приложение.ScreenUpdating = False
Установите xSht = ActiveSheet
xRCount = xSht.UsedRange.End(xlDown).Row
xTitle = "A1:B1"
xTRrow = xSht.Range(xTitle).Row
Для I = 2 Для xRCount
Вызов xCol.Add(CStr(xSht.Cells(I, 1)), CStr(xSht.Cells(I, 1)))
Далее
Debug.Print xCol.Count
Для I = 1 To xCol.Count
Вызов xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
Установить xNSht = Ничего
Установите xNSht = Рабочие листы (CStr (xCol.Item (I)))
Если xNSht ничего, то
Установите xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I) & xSht.Cells(I + 1, 2))
Еще
xNSht.Move , Листы(Листы.Количество)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Далее
xSht.AutoFilterMode = Ложь
xSht.Активировать
Application.ScreenUpdating = True
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Это было очень полезно, как раз то, что я искал. Спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Этот код очень полезен, и почти то, что я искал.
А можно ли настроить так, чтобы было два листа -
Лист 1 - это данные - таблица данных, в которой столбец A является именем
Лист 2 представляет собой шаблон с многочисленными полями, требующими заполнения.
Я надеялся запустить макрос, который
1 Скопируйте и вставьте шаблон, в том же файле назовите лист именем в ячейке A1.
2 Скопируйте ячейку B1, а затем вставьте в выбранное поле в новом шаблоне.
3 повторять по 1 ряду до пустого
4, затем повторить для ряда 2 и каждого ряда до конца.
Результатом является файл с номером x. листы все те же, что и в шаблоне, со всеми заполненными полями.
Я унаследовал файл, который работает наоборот, извлекает данные из шаблонов в таблицу, но не может их отменить.....
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Сэм,
Было бы неплохо, если бы вы могли прикрепить свою рабочую тетрадь здесь.
Вы можете загрузить свой файл с помощью расположенной ниже кнопки Загрузить файлы.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте, я пытался использовать ваш код, но я получаю сообщение об ошибке
Ошибка времени выполнения «1004»:
Ошибка, определяемая приложением или объектом
У меня нет знаний о VBA (или любой другой технологии в этом отношении), но если отладить прессу, она выделит строку 11 xRCount=xSht.Cells(xSht.Rows.Count,1). Конец(xIUp).Строка
Я работаю с большим файлом, который имеет 127 столбцов и 337 строк (строки будут различаться столбцами, а не столбцами), и это список с моими номерами и их деталями.
Я изменил диапазон, как вы заметили, но все равно не работает. Я использую Excel 2010. Не могли бы вы рассказать мне, как заставить его работать, если это возможно?
спасибо
Этот комментарий был сведен к минимуму модератором на сайте
Дорогая Беатрис,
Код обновляется с решением проблемы. Пожалуйста, попробуйте еще раз. Спасибо за ваш комментарий.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте, я думаю, что здесь есть что-то полезное для моей ситуации, но я могу сделать VBA или скрипт, надеюсь, вы поможете.
У меня есть шаблон с множеством ячеек для заполнения данными, и будет ключ поиска (не уникальный), который я хотел бы ввести в шаблон. На основе ключа поиска выполняется поиск данных, и соответствующие данные по совпавшему ключу извлекаются и вносятся в шаблон. Заполненный шаблон сохраняется на новом листе. Там может быть более 1 записей совпадений. Мне нужен сценарий для продолжения поиска по списку, пока не будут выбраны все совпадения и не создано определенное количество новых рабочих листов.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, есть ли способ сохранить строку заголовка на каждом новом листе? (в прикрепленном файле обведено красным)

Код берет все строки из моего основного рабочего листа и переносит их в новые рабочие листы, и это здорово. Но я хочу, чтобы значение заголовка «главный» (обведено красным) было вверху каждого нового рабочего листа. Спасибо!



Я имею в виду этот код сверху:

Подстрока на листе ()
Dim xRow As Long
Дим я пока
С ActiveSheet
xRow = .Range("A" & Rows.Count).End(xlUp).Row
Для I = 1 To xRow
Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row" & I
.Rows(I).Copy Sheets("Row" & I).Range("A1")
Далее я
Конец с
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Отличный код, но могу ли я получить помощь, если мои данные находятся в столбце G, а не в столбце A? что мне нужно изменить, чтобы данные столбца G находились на другой вкладке?

Спасибо
Этот комментарий был сведен к минимуму модератором на сайте
Это отличный код. Большое спасибо умникам из OfficeExtend!! Можно ли в любом случае немного адаптировать этот код для создания отдельных листов для каждого *столбца* вместо строки? Я прикрепил изображение того, чего я пытаюсь достичь. Это возможно? С уважением.
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день,
Я не видел твою фотографию здесь.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, как изменить код, если мое поле имени находится в столбце C
Этот комментарий был сведен к минимуму модератором на сайте
Привет Абдул Басит,
Приведенный ниже код VBA может вам помочь. Пожалуйста, попробуйте.
В строке: xCName="3", 3 указывает номер столбца (здесь столбец C) в Excel. Вы можете изменить его на любой номер столбца по мере необходимости.

Sub parse_data()
'Обновить Extendoffice 2018/3/2
Dim xRCount As Long
Dim xSht как рабочий лист
Dim xNSht As Worksheet
Дим я пока
Dim xTRrow как целое число
Dim xCol как новая коллекция
Dim xTitle как строка
Dim xSUpdate как логическое значение
Dim xCName как целое число
Dim xTA, xRA, xSRg1 как строка
Установите xSht = ActiveSheet
On Error Resume Next
xRCount = xSht.Cells(xSht.Rows.Count, 1).Конец(xlUp).Строка
xTitle = "А1:С1"
xCName = "3" 'Измените это число на номер столбца, на основе которого вы будете создавать новые листы.
xtrrow = xsht.range (xtitle) .cells (1) .row
Для I = 2 Для xRCount
Вызов xCol.Add(xSht.Cells(I, xCName).Text, xSht.Cells(I, xCName).Text)
Далее
xSUpdate = Application.ScreenUpdating
Приложение.ScreenUpdating = False
xSRg = xSht.Cells(1, xCName).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Для I = 1 To xCol.Count
Вызов xSht.Range(xTitle).AutoFilter(xCName, CStr(xCol.Item(I)))
Установить xNSht = Ничего
Установите xNSht = Рабочие листы (CStr (xCol.Item (I)))
Если xNSht ничего, то
Установите xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I))
Еще
xNSht.Move , Листы(Листы.Количество)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Далее
xSht.AutoFilterMode = Ложь
xSht.Активировать
Application.ScreenUpdating = xSUpdate
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Крутой код VBA, чтобы добиться цели.

Как я могу изменить его, чтобы не копировать первый столбец? И удалить имя столбца?

С уважением
Этот комментарий был сведен к минимуму модератором на сайте
Пожалуйста, могу ли я получить помощь в том, как автоматически называть листы, используя определенный столбец. Это для строки листа VBA. Смотри ниже

Подстрока на листе ()

Dim xRow As Long

Дим я пока

С ActiveSheet

xRow = .Range("A" & Rows.Count).End(xlUp).Row

Для I = 1 To xRow

Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row" & I

.Rows(I).Copy Sheets("Row" & I).Range("A1")

Далее я

Конец с

End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Неважно, что это были скрытые конечные пробелы. Я использовал функцию TRIM и очистил ее. Наличие количества строк (на самом деле количество строк, поэтому строки -1, добавленные к листу, были бы потрясающими)
Этот комментарий был сведен к минимуму модератором на сайте
Как сослаться на использование кода выше (кредит)? Можно ли изменить код?
Этот комментарий был сведен к минимуму модератором на сайте
Привет, это открытая коммуникационная платформа. Код разрешено ссылаться и изменять.
Этот комментарий был сведен к минимуму модератором на сайте
Нана
86
2
Этот комментарий был сведен к минимуму модератором на сайте
Привет! Я просто использовал этот код, и он сработал! Помимо создания нового листа для каждой записи, я хочу перенести его на столбцы и не могу понять. Итак, для приведенного выше примера вывод для Наны будет выглядеть так: Имя и фамилия НанаСчет 86Нет. 2
Этот комментарий был сведен к минимуму модератором на сайте
Привет, использовал этот код и сработал, но если я хочу выбрать более одной строки в заголовке, что изменится в коде? У меня есть несколько строк на листе, которые я хочу на каждом листе.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, как разобрался?
Этот комментарий был сведен к минимуму модератором на сайте
Привет, есть ли код, который будет добавлять только 1 новый лист каждый раз, когда запускается макрос, например, 1-й раз, когда новый лист будет назван в содержимом ячейки A1, 2-й раз, когда макрос будет запущен, новый лист будет назван в содержание A2 и т. д. спасибо в ожидании
Здесь еще нет комментариев
Загрузить ещё
Оставляйте свои комментарии
Публикация как гость
×
Оценить этот пост:
0   Характеристики
Предлагаемые места

Подписывайтесь на Нас

Copyright © 2009 - www.extendoffice.ком. | Все права защищены. Питаться от ExtendOffice, | Карта сайта
Microsoft и логотип Office являются товарными знаками или зарегистрированными товарными знаками Microsoft Corporation в США и / или других странах.
Защищено Sectigo SSL