Разделение содержимого ячейки в CSV-файле на отдельные ячейки - PullRequest
1 голос
/ 09 августа 2010

У меня большой CSV-файл, полный названий и адресов организаций. Мне нужно передать чистый CSV-файл нашим разработчикам, которым необходимо построить базу данных вокруг них.

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

Итак, я хотел бы разделить содержимое ячейки адреса на две ячейки. Ячейка адреса построена следующим образом: [название улицы] [пробел] [цифры] [и т. Д.] - поэтому мне нужно сохранить только название улицы и переместить все после названия улицы в другую ячейку.

Примером может служить ячейка содержимого D7:

[D7] Konkylievej 3, 1. m.f. [/ D7]

Что должно быть разделено следующим образом:

[D7] Konkylievej [/ D7]

[E7] 3, 1. m.f. [/ E7]

Размер файла CSV делает невозможным это сделать вручную. Есть ли способ сделать это автоматически?

Ответы [ 3 ]

0 голосов
/ 09 августа 2010

Поскольку вам нужно только разделить это на две ячейки, вы можете сделать это с помощью небольшого фрагмента кода VBA. Вставьте это в код Sheet1 вашей рабочей книги VBA (Alt-F11, чтобы попасть в редактор VBA). Измените диапазон с A1: A200 на то, что вам нужно, а также на другое имя листа (ваши данные могут быть не на листе 1). Как только вы его настроите, нажмите F5, и он должен сделать то, что вы ищете. Очевидно, вы можете проверить это в копии ваших исходных данных, чтобы убедиться, что вы получите ожидаемые результаты. Я заполнил несколько ячеек "123 Main", а затем "123" в столбце A и "Main" в столбце B. Он возьмет все справа от первого пробела и поместит его в столбец B, а затем обрежет все справа пространства и оставьте то, что осталось в столбце А.

Option Explicit

Sub SeparateAtTheSpace()
    Dim cell As Range, areaToSplit As Range
    Set areaToSplit = Sheet1.Range("A1:A200")
    For Each cell In areaToSplit
        If IsEmpty(cell) = False Then
            cell.Offset(0, 1).Value = Right(cell.Value, InStr(1, cell.Value, " ") + 1)
            cell.Value = Left(cell.Value, InStr(1, cell.Value, " "))
        End If
    Next cell
End Sub
0 голосов
/ 11 августа 2010

Не самое элегантное решение, но, пожалуйста, попробуйте это ...

Option Explicit

Sub SeparateAtTheSpace()
        Dim cell As Range, areaToSplit As Range
        Dim str As String
        Dim i As Integer
        Set areaToSplit = Sheet1.Range("D1:D305")
        For Each cell In areaToSplit
                If IsEmpty(cell) = False Then
                        str = cell.Value
                        For i = 1 To Len(str)
                                If IsNumeric(Mid(str, i, 1)) Then
                                        If IsEmpty(cell.Offset(0, 1)) = True Then
                                                cell.Offset(0, 1).Value = Right(str, Len(str) - i + 1)
                                                cell.Value = Left(cell.Value, i - 1)
                                        End If
                                End If
                        Next i
                End If
        Next cell
End Sub
0 голосов
/ 09 августа 2010

Это немного меняется в зависимости от используемой версии Excel, но в основном вы должны выбрать столбец и найти «Текст в столбцах» в меню (скорее всего, «Меню данных» в версиях до 2007 г. или «Лента данных» в 2007 г. и далее). .) Затем в диалоговом окне выберите «С разделителями», а затем скажите Excel использовать пробелы для разделения текста на столбцы.

Надеюсь, что работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...