Sub SplitToFilesByAddress()
Dim wsSource As Worksheet
Dim wbNew As Workbook
Dim wsNew As Worksheet
Dim lastRow As Long
Dim i As Long
Dim addressVal As String
Dim safeFileName As String
Dim savePath As String
' Проверка, сохранен ли текущий файл
If ThisWorkbook.Path = "" Then
MsgBox "Пожалуйста, сначала сохраните этот файл в какую-нибудь папку на ПК, а потом запускайте макрос.", vbExclamation
Exit Sub
End If
' Папка для сохранения (создастся там же, где лежит твой файл)
savePath = ThisWorkbook.Path & "\Разделенные_Адреса\"
If Dir(savePath, vbDirectory) = "" Then
MkDir savePath
End If
Set wsSource = ThisWorkbook.ActiveSheet
' Ищем последнюю заполненную строку по колонке B (ФИО)
lastRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
' Отключаем обновление экрана, чтобы макрос не "моргал" и работал в разы быстрее
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 2 To lastRow ' Начинаем со 2 строки, так как 1-я — это шапка
addressVal = wsSource.Cells(i, 6).Text ' Колонка F (6 по счету) — это Адрес
If Trim(addressVal) <> "" Then
' Очищаем имя от спецсимволов, которые Windows не разрешает в именах файлов
safeFileName = addressVal
safeFileName = Replace(safeFileName, "/", "_")
safeFileName = Replace(safeFileName, "\", "_")
safeFileName = Replace(safeFileName, ":", "_")
safeFileName = Replace(safeFileName, "*", "_")
safeFileName = Replace(safeFileName, "?", "_")
safeFileName = Replace(safeFileName, """", "_")
safeFileName = Replace(safeFileName, "<", "_")
safeFileName = Replace(safeFileName, ">", "_")
safeFileName = Replace(safeFileName, "|", "_")
' Создаем новый файл
Set wbNew = Workbooks.Add
Set wsNew = wbNew.Sheets(1)
' Копируем шапку (строка 1) с шириной колонок и цветами
wsSource.Rows(1).Copy
wsNew.Rows(1).PasteSpecial Paste:=xlPasteAll
wsNew.Rows(1).PasteSpecial Paste:=xlPasteColumnWidths
' Копируем текущую строку с данными
wsSource.Rows(i).Copy
wsNew.Rows(2).PasteSpecial Paste:=xlPasteAll
' Сохраняем и закрываем новый файл
wbNew.SaveAs Filename:=savePath & safeFileName & ".xlsx", FileFormat:=xlOpenXMLWorkbook
wbNew.Close SaveChanges:=False
End If
Next i
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Готово! Создано файлов: " & (lastRow - 1) & vbCrLf & "Ищите их в папке: " & savePath, vbInformation
End Sub