Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Разъединение файла на n-е количество по столбцу - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разъединение файла на n-е количество по столбцу (Макросы/Sub)
Разъединение файла на n-е количество по столбцу
GeorgeXIII Дата: Пятница, 03.03.2017, 16:11 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Помогите написать макрос, который разделит файл 5086469.XLSX на столько файлов, сколько значений в столбце "Район" (на 8 файлов) с именем каждого по названию района (н-р Агинский.xlsx, Акшинский.xlsx и т.д.).
Заранее спасибо!
К сообщению приложен файл: 5086469.xlsx (38.7 Kb)


Сообщение отредактировал GeorgeXIII - Пятница, 03.03.2017, 16:12
 
Ответить
СообщениеПомогите написать макрос, который разделит файл 5086469.XLSX на столько файлов, сколько значений в столбце "Район" (на 8 файлов) с именем каждого по названию района (н-р Агинский.xlsx, Акшинский.xlsx и т.д.).
Заранее спасибо!

Автор - GeorgeXIII
Дата добавления - 03.03.2017 в 16:11
Roman777 Дата: Пятница, 03.03.2017, 17:11 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
GeorgeXIII, в Вашем случае, если так и будет отсортирован по району файл, то можно так:
[vba]
Код
Sub Разделение()
Dim i&, i_n&, k&, k2&
Dim WB As Workbook, TWB As Workbook
Dim path1$
Dim o As Object, key$, pthkey$
Set TWB = ThisWorkbook
path1 = TWB.Path & "\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i_n = TWB.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
Set o = CreateObject("Scripting.dictionary")
For i = 2 To i_n
   key = TWB.Worksheets(1).Cells(i, 2)
   If Not o.exists(key) Then
      k = k + 1
      If k > 1 Then
         WB.SaveAs Filename:=path1 & pthkey & ".xlsx"
         WB.Close
      End If
      Set WB = Workbooks.Add
      TWB.Worksheets(1).Rows(1).Copy
      WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths
      TWB.Worksheets(1).Rows(1).Copy
      WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteAll
      WB.Worksheets(1).Cells(1, 1).Resize(, 7).AutoFilter
      o.Add key, k
      pthkey = key
      k2 = 1
   End If
   k2 = k2 + 1
   TWB.Worksheets(1).Rows(i).Copy WB.Worksheets(1).Cells(k2, 1)
Next i
WB.SaveAs Filename:=path1 & pthkey & ".xlsx"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеGeorgeXIII, в Вашем случае, если так и будет отсортирован по району файл, то можно так:
[vba]
Код
Sub Разделение()
Dim i&, i_n&, k&, k2&
Dim WB As Workbook, TWB As Workbook
Dim path1$
Dim o As Object, key$, pthkey$
Set TWB = ThisWorkbook
path1 = TWB.Path & "\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i_n = TWB.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
Set o = CreateObject("Scripting.dictionary")
For i = 2 To i_n
   key = TWB.Worksheets(1).Cells(i, 2)
   If Not o.exists(key) Then
      k = k + 1
      If k > 1 Then
         WB.SaveAs Filename:=path1 & pthkey & ".xlsx"
         WB.Close
      End If
      Set WB = Workbooks.Add
      TWB.Worksheets(1).Rows(1).Copy
      WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths
      TWB.Worksheets(1).Rows(1).Copy
      WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteAll
      WB.Worksheets(1).Cells(1, 1).Resize(, 7).AutoFilter
      o.Add key, k
      pthkey = key
      k2 = 1
   End If
   k2 = k2 + 1
   TWB.Worksheets(1).Rows(i).Copy WB.Worksheets(1).Cells(k2, 1)
Next i
WB.SaveAs Filename:=path1 & pthkey & ".xlsx"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Roman777
Дата добавления - 03.03.2017 в 17:11
PowerBoy Дата: Пятница, 03.03.2017, 23:08 | Сообщение № 3
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Попробуйте файл


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)
 
Ответить
СообщениеПопробуйте файл

Автор - PowerBoy
Дата добавления - 03.03.2017 в 23:08
GeorgeXIII Дата: Суббота, 04.03.2017, 03:17 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
в Вашем случае, если так и будет отсортирован по району файл, то можно так:

Спасибо большое!!! А где подправить чтобы сохранялся в XLS?
 
Ответить
Сообщение
в Вашем случае, если так и будет отсортирован по району файл, то можно так:

Спасибо большое!!! А где подправить чтобы сохранялся в XLS?

Автор - GeorgeXIII
Дата добавления - 04.03.2017 в 03:17
krosav4ig Дата: Суббота, 04.03.2017, 05:46 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
еще вариант [vba]
Код
Sub d()
    Dim sh As Worksheet, rng As Range
    ActiveSheet.Copy
    With ActiveWorkbook
        Set sh = .Sheets(1)
        On Error Resume Next
        Do Until Err
            Set rng = sh.[b2].Resize(sh.Rows.Count - 1).ColumnDifferences(sh.[b2])
            If Err = 0 Then Sheets.Add , sh
            sh.[1:1].Copy sh.Next.[1:1]: rng.EntireRow.Cut sh.Next.[A2]
            sh.[1:1].Copy: sh.Next.[1:1].PasteSpecial (xlPasteColumnWidths)
            sh.SaveAs "D:\папка\" & sh.[b2] & ".xlsx": Set sh = sh.Next
        Loop
        .Close False
    End With
End Sub
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Суббота, 04.03.2017, 05:48
 
Ответить
Сообщениееще вариант [vba]
Код
Sub d()
    Dim sh As Worksheet, rng As Range
    ActiveSheet.Copy
    With ActiveWorkbook
        Set sh = .Sheets(1)
        On Error Resume Next
        Do Until Err
            Set rng = sh.[b2].Resize(sh.Rows.Count - 1).ColumnDifferences(sh.[b2])
            If Err = 0 Then Sheets.Add , sh
            sh.[1:1].Copy sh.Next.[1:1]: rng.EntireRow.Cut sh.Next.[A2]
            sh.[1:1].Copy: sh.Next.[1:1].PasteSpecial (xlPasteColumnWidths)
            sh.SaveAs "D:\папка\" & sh.[b2] & ".xlsx": Set sh = sh.Next
        Loop
        .Close False
    End With
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 04.03.2017 в 05:46
Roman777 Дата: Воскресенье, 05.03.2017, 09:56 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Чуть изменил, чтобы подправлять в 1 месте можно было:
[vba]
Код
Sub Разделение()
Dim i&, i_n&, k&, k2&
Dim WB As Workbook, TWB As Workbook
Dim path1$
Dim o As Object, key$, pthkey$
Dim ft$
ft = ".xls"
Set TWB = ThisWorkbook
path1 = TWB.Path & "\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i_n = TWB.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
Set o = CreateObject("Scripting.dictionary")
For i = 2 To i_n
key = TWB.Worksheets(1).Cells(i, 2)
If Not o.exists(key) Then
    k = k + 1
    If k > 1 Then
        WB.SaveAs Filename:=path1 & pthkey & ft
        WB.Close
    End If
    Set WB = Workbooks.Add
    TWB.Worksheets(1).Rows(1).Copy
    WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths
    TWB.Worksheets(1).Rows(1).Copy
    WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteAll
    WB.Worksheets(1).Cells(1, 1).Resize(, 7).AutoFilter
    o.Add key, k
    pthkey = key
    k2 = 1
End If
k2 = k2 + 1
TWB.Worksheets(1).Rows(i).Copy WB.Worksheets(1).Cells(k2, 1)
Next i
WB.SaveAs Filename:=path1 & pthkey & ft
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
[/vba]
Подправить расширение файла можно в строчке [vba]
Код
ft = ".xls"
[/vba]

Гораздо красивее и интереснее вариант krosav4ig. Он и заметно быстрее обрабатывать будет на больших таблицах.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Воскресенье, 05.03.2017, 09:59
 
Ответить
СообщениеЧуть изменил, чтобы подправлять в 1 месте можно было:
[vba]
Код
Sub Разделение()
Dim i&, i_n&, k&, k2&
Dim WB As Workbook, TWB As Workbook
Dim path1$
Dim o As Object, key$, pthkey$
Dim ft$
ft = ".xls"
Set TWB = ThisWorkbook
path1 = TWB.Path & "\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i_n = TWB.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
Set o = CreateObject("Scripting.dictionary")
For i = 2 To i_n
key = TWB.Worksheets(1).Cells(i, 2)
If Not o.exists(key) Then
    k = k + 1
    If k > 1 Then
        WB.SaveAs Filename:=path1 & pthkey & ft
        WB.Close
    End If
    Set WB = Workbooks.Add
    TWB.Worksheets(1).Rows(1).Copy
    WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths
    TWB.Worksheets(1).Rows(1).Copy
    WB.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteAll
    WB.Worksheets(1).Cells(1, 1).Resize(, 7).AutoFilter
    o.Add key, k
    pthkey = key
    k2 = 1
End If
k2 = k2 + 1
TWB.Worksheets(1).Rows(i).Copy WB.Worksheets(1).Cells(k2, 1)
Next i
WB.SaveAs Filename:=path1 & pthkey & ft
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
[/vba]
Подправить расширение файла можно в строчке [vba]
Код
ft = ".xls"
[/vba]

Гораздо красивее и интереснее вариант krosav4ig. Он и заметно быстрее обрабатывать будет на больших таблицах.

Автор - Roman777
Дата добавления - 05.03.2017 в 09:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разъединение файла на n-е количество по столбцу (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!