2010-08-09 2 views
1

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

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

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

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

[D7] Konkylievej 3, 1. М.Ф. [/ D7]

Какой бы быть разделен так:

[D7] Konkylievej [/ D7]

[E7] 3, 1. МЖ [/ E7]

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

+0

Вы можете взглянуть на мой CSVfix инструмент FOSS по адресу : //code.google.com/p/csvfix, особенно в команде split_char. – 2010-08-09 08:13:35

+0

Хотя я уже ответил, я не уверен, что это вопрос программирования, строго говоря, –

ответ

0

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

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

Работает отлично. большое спасибо –

0

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

Надежда, которая работает

+0

HI Yoni H. Я попробовал вас решение, и на мгновение я подумал, что это сработает, но я застрял, когда мне нужен разделительный разделитель, который бы матч «любая цифра» –

+0

Я думаю, что здесь может быть какое-то недопонимание. Разделитель отделяет тексты от полей, поэтому вам не нужен шаблон для «любой цифры», но разделитель между вашей улицей и номером. Мне казалось, что это может быть только пространство, но я, возможно, получил что-то не так. –

0

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

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

Hi Michael, Это было очень близко. К сожалению, некоторые названия улиц в них есть места. Было бы возможно немного изменить это утверждение, чтобы он читал что-то вроде этого. Возьмите все слева от первого пробела за цифрой и переместите его в колонку слева от текущей. –

+0

Под вами вы увидите, как я изменил код в соответствии с моими потребностями и результатами. Вот измененный код: Option Explicit Sub SeparateAtTheSpace() Dim клетки Как хребет, areaToSplit As Range Set areaToSplit = Ark1.Range ("D1: D305") для каждой ячейки в areaToSplit Если IsEmpty (ячейка) = False Затем cell.Offset (0, 1) .Value = Right (cell.Value, InStr (1, cell.Value, "") + 1) cell.Value = Left (cell.Value, InStr (1, cell.Value, "")) Завершить If Следующая ячейка End Sub –

+0

Предлагает фрагмент оригинала и результат выполнения кода: Оригинал: http://img690.imageshack.us/img690/5607/for1v.jpg Результат: http://img541.imageshack.us/img541/9513/for2k.jpg –

Смежные вопросы