Здравствуйте. Уперся в одну задачку: перегнать коды ОКТМО (ОБЩЕРОССИЙСКИЙ КЛАССИФИКАТОР
ТЕРРИТОРИЙ МУНИЦИПАЛЬНЫХ ОБРАЗОВАНИЙ) в таблицу (Access). Исходник выглядит так:
| 1 | - Альмухаметовский сельсовет |
| с Целинный 80 201 804 001, д Альмухаметово 80 201 804 002, д Булатово 80 201 804 003, д Верхнее Абдряшево 80 201 804 004, д Нижнее Абдряшево 80 201 804 005, д Северный 80 201 804 006, д ст Альмухаметово 80 201 804 007, д ст Сухое Озеро 80 201 804 008, д Уральский 80 201 804 009 |
если территории верхних уровней укладываются в структуру базы данных (достаточно просто скопировать), то деревни и сёла свалены в кучу в 4-м столбце. Для базы данных хорошая структура как основа построения дерева будет выглядеть так:
ID | KCh | Name | Parent |
80601404 | 1 | - Альмухаметовский сельсовет | 80601400 |
80 201 804 001 | | с Целинный | 80601404 |
и т.д.
На данный момент получилось загнать 4-й столбец в массив и его элементы распихать построчно в Name. Но они выглядят как "Name+ID"("с Целинный 80 201 804 001" и т.д...)
Вопрос: как мне разбить эту сладкую парочку, чтобы потом раскидать по местам? Split не катит, поскольку разделитель - пробел а их там может быть несколько. IsNumeric - тоже, т.к. числовые значения в названиях тоже возможны.
Может взять разделителем "80", после сплита он исчезнет и его контакенировать?
Код который пока есть:
Код |
---|
Option Explicit
Sub split_cell()
Dim arr() As String ' массивы
Dim i As Integer, y As Integer ' счетчики
Application.ScreenUpdating = False
arr() = Split(CStr(ActiveCell.Value), ",") 'загоняем 4-й столбец в массив
y = UBound(arr) - LBound(arr)
For i = 0 To y
Cells(ActiveCell.Row + 1, 1).EntireRow.Select ' выделить нижележащую строку
Selection.EntireRow.Insert shift:=xlUp ' вставить строку
Selection.Rows.AutoFit ' выровнять её высоту
Cells(ActiveCell.Row, 4) = arr(i) ' вставить в ячейку текущий элемент массива
Next i
Application.ScreenUpdating = True
End Sub
|
пример также прикрепляю.