Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Разделение листов книги на файлы по именам листов
 
Столько примеров, явно кому-нибудь пригодится)

Ещё, чтобы не плодить темы, как-то можно с помощью InputBox заполнить массив? Не по одному значению, а целиком в одной форме?
Разделение листов книги на файлы по именам листов
 
Сделал, делюсь кодом. Палками не бить, про оптимизацию речи даже не стояло.
Код
Sub Split():
    Dim i As Integer
    Dim j As Integer
    Dim sheet_c As Integer
    Dim sh_count As Integer
    Dim name As String
    Dim newWB As Workbook
    Dim format As String
    format = ".xlsx"
    sh_count = ThisWorkbook.Worksheets.Count
    Dim sh_name() As String
    ReDim sh_name(1 To sh_count)
    For i = 1 To sh_count
        name = Mid(ThisWorkbook.Sheets(i).name, 1, 5)
        sh_name(i) = name
    Next
    
    For i = 1 To sh_count
        Set newWB = Workbooks.Add
        sheet_c = 1
        For j = 1 To sh_count
            If sh_name(i) = Mid(ThisWorkbook.Sheets(j).name, 1, 5) Then
            ThisWorkbook.Sheets(j).Copy newWB.Sheets(sheet_c)
            sheet_c = sheet_c + 1
            End If
        Next
        name = sh_name(i) & format
        newWB.Application.DisplayAlerts = False
        newWB.Sheets("Лист1").Delete
        newWB.Sheets("Лист2").Delete
        newWB.Sheets("Лист3").Delete
        newWB.SaveAs (name)
        newWB.Close
    Next
    
End Sub
Изменено: Stratcher - 23.03.2018 07:49:01
Разделение листов книги на файлы по именам листов
 
Не могу разобраться с массивом для хранения уникальных имён. Даже объявить толком не могу, хотя вроде делаю как положено.
Код
Dim Name(Worksheets.Count) as String
Разделение листов книги на файлы по именам листов
 
Добрый вечер!

Есть книга Excel, в ней уйма листов. В названиях листов первая часть имени является названием класса, к примеру, 354А(группа1), 354А(группа2). Нужно разделить книгу на файлы, в которых будут листы с одинаковыми классами.

На питоне это реализуется очень просто, вот так. Суть кода элементарная как сам код - сперва формируем множество уникальных названий класса, путём взятие первых 4 символов из названия каждого листа, потом циклом сравниваем каждый класс именами листов, если название содержит класс, добавляем в книгу, в конце сохраняем книгу по имени класса. Собственно, на питоне это и работает, однако такой подход убивает всё оформление, что, увы, не подходит. Подскажите пожалуйста, как реализовать сей код на VBA?
Код
import pyexcel_xlsx as pe
from pyexcel_xlsx import save_data
from collections import OrderedDict

file = pe.get_data('2018.xlsx')
sheet_name = set()

for key in file.keys():
    sheet_name.add(key[0:4].lower())

for name in sheet_name:
    data = OrderedDict()
    for key in file.keys():
        if name in key.lower():
            data.update({key:file[key]})
    save_data('{}.xlsx'.format(name), data)
Изменено: Stratcher - 22.03.2018 20:36:29
Страницы: 1
Наверх