Друзья, добрый день! Требуется помощь в разделении текста по разделителям
Дано:
число строк - около 500
в каждой строке - от 1 до 2000 чисел, разделенных запятой
длина каждого числа разная (как правило 7 или 10 цифр)
всего чисел около 41000
Требуется разделить текст в каждой строке и выделить каждое число в отдельную ячейку (с транспонированием - чтобы получилось 1 столбец и 41000 строк)
Ширина листа экселя не позволяет содержать 2000 столбцов (сколько кстати максимум столбцов? версия офиса 2010 года), поэтому стандартный метод не помогает. Как можно достичь результата? Можно ли разделять по каждому N-ному разделителю? Хочу попробовать сделать в несколько этапов: разделить строчку из 2000 чисел сначала, например, на 20 более коротких ячеек, затем каждую из этих ячеек разделить уже обычным "текст по столбцам". Развивая свою мысль, можно ли в одной ячейке найти и заменить каждый N-ный символ "запятая" на другой разделитель?
Упрощенный пример и желаемый результат в аттаче
PS возможно есть более простой вариант разделения по столбцам и транспонирования такого массива?
Друзья, добрый день! Требуется помощь в разделении текста по разделителям
Дано:
число строк - около 500
в каждой строке - от 1 до 2000 чисел, разделенных запятой
длина каждого числа разная (как правило 7 или 10 цифр)
всего чисел около 41000
Требуется разделить текст в каждой строке и выделить каждое число в отдельную ячейку (с транспонированием - чтобы получилось 1 столбец и 41000 строк)
Ширина листа экселя не позволяет содержать 2000 столбцов (сколько кстати максимум столбцов? версия офиса 2010 года), поэтому стандартный метод не помогает. Как можно достичь результата? Можно ли разделять по каждому N-ному разделителю? Хочу попробовать сделать в несколько этапов: разделить строчку из 2000 чисел сначала, например, на 20 более коротких ячеек, затем каждую из этих ячеек разделить уже обычным "текст по столбцам". Развивая свою мысль, можно ли в одной ячейке найти и заменить каждый N-ный символ "запятая" на другой разделитель?
Упрощенный пример и желаемый результат в аттаче
PS возможно есть более простой вариант разделения по столбцам и транспонирования такого массива?Nigle
Nigle, а исходный текст у вас в Excel? Может проще сначала в Word-е заменить запятые на знак абзаца, а потом запихнуть полученный вертикальный массив в Excel?
Nigle, а исходный текст у вас в Excel? Может проще сначала в Word-е заменить запятые на знак абзаца, а потом запихнуть полученный вертикальный массив в Excel?buchlotnik
buchlotnik, спасибо, идея интересная, но ворд вставляет знак абзаца как просто симов, но не как спец символ с соответствующим переходом на новый абзац
Добавлено: Разобрался. спасибо! Действительно получается вставить спец символ "новый абзац" именно с соответствующим переносом. Вопрос темы закрыт
buchlotnik, спасибо, идея интересная, но ворд вставляет знак абзаца как просто симов, но не как спец символ с соответствующим переходом на новый абзац
Добавлено: Разобрался. спасибо! Действительно получается вставить спец символ "новый абзац" именно с соответствующим переносом. Вопрос темы закрытNigle
Сообщение отредактировал Nigle - Вторник, 18.11.2014, 14:19
Предлагаю решение макросом, кнопка с примером во вложении.
Подходит?
Код под спойлером.
[vba]
Код
Option Explicit Option Base 1
Dim ArrX As Variant Dim StrA As String Dim X As Long Dim A As Long Dim B As Long
Sub Rio_Butcher()
X = 1
Do While Cells(X, 1).Value <> "" StrA = StrA & "," & Cells(X, 1).Value X = X + 1 Loop
For X = 1 To Len(StrA) If Mid(StrA, X, 1) = "," Then A = A + 1 Next X
ReDim ArrX(A, 1) X = 0
Do While StrA <> "" X = X + 1 StrA = Mid(StrA, 2, Len(StrA) - 1) B = InStr(1, StrA, ",") - 1 If B < 0 Then B = Len(StrA) ArrX(X, 1) = Left(StrA, B) StrA = Right(StrA, Len(StrA) - B) Loop
Cells(1, 1).Resize(A, 1).Value = ArrX
End Sub
[/vba]
Nigle, здравствуйте.
Предлагаю решение макросом, кнопка с примером во вложении.
Подходит?
Код под спойлером.
[vba]
Код
Option Explicit Option Base 1
Dim ArrX As Variant Dim StrA As String Dim X As Long Dim A As Long Dim B As Long
Sub Rio_Butcher()
X = 1
Do While Cells(X, 1).Value <> "" StrA = StrA & "," & Cells(X, 1).Value X = X + 1 Loop
For X = 1 To Len(StrA) If Mid(StrA, X, 1) = "," Then A = A + 1 Next X
ReDim ArrX(A, 1) X = 0
Do While StrA <> "" X = X + 1 StrA = Mid(StrA, 2, Len(StrA) - 1) B = InStr(1, StrA, ",") - 1 If B < 0 Then B = Len(StrA) ArrX(X, 1) = Left(StrA, B) StrA = Right(StrA, Len(StrA) - B) Loop