Function Text2Array(ByVal txt$, Optional ByVal ColumnsSeparator$ = " ", _
Optional ByVal RowsSeparator$ = vbNewLine) As Variant
' получает в качестве параметров текстовую строку TXT,
' и разделители строк и столбцов для разбиваемой строки
' Возвращает двумерный массив - результат разбиения строки
txt = Trim(txt): On Error Resume Next: Err.Clear
If txt Like "*" & RowsSeparator$ Then txt = Left(txt, Len(txt) - Len(RowsSeparator$))
tmpArr1 = Split(txt, RowsSeparator$): RowsCount = UBound(tmpArr1) + 1
ColumnsCount = UBound(Split(tmpArr1(0), ColumnsSeparator$)) + 1
If Err.Number > 0 Then MsgBox "Строка не может быть разбита на двумерный массив", vbCritical: End
ReDim Arr(1 To RowsCount, 1 To ColumnsCount)
For i = LBound(tmpArr1) To UBound(tmpArr1)
tmpArr2 = Split(Trim(tmpArr1(i)), ColumnsSeparator$)
For j = 1 To ColumnsCount
Arr(i + 1, j) = tmpArr2(j - 1)
Next j
Next i
Text2Array = Arr
End Function
Комментарии
Добрый день, ищу решение обратной задачи. Преобразование двумерного массива в одномерный. Может кто-нибудь подсказать или дать ссылочку
Кстати, как вариант, вместо
ColumnsCount = UBound(Split(tmpArr1(0), ColumnsSeparator$)) + 1
прописать
For i = LBound(tmpArr1) To UBound(tmpArr1)
ColumnsCount = IIf(UBound(Split(tmpArr1(i), ColumnsSeparator)) + 1 > ColumnsCount, UBound(Split(tmpArr1(i), ColumnsSeparator)) + 1, ColumnsCount)
Next i
тогда в случае следующей строки
123 123
321 321 321
кол-во столбцов будет = 3, а не 2, как в предыдущем случае, что вроде как правильней
А зачем строка
If txt Like "*" & RowsSeparator$ Then txt = Left(txt, Len(txt) - Len(RowsSeparator$))
Вам помогут следующие функции и макросы:
Первый макрос покажет вам пример разбиения текстовой строки,
второй - обработает всю вашу таблицу, разбив текст на ячейки,
а функция SplitText - основа для этих макросов.
Из приведённой вами текстовой строки, функция возвращает одномерный массив из 4 элементов:
Учусь! Никакого проекта нет, все только в планах. Думаю с какой стороны подойти.
На данный момент интересует вот чно.
В ячейке (B1...Bn+1) строка типа "Болт (обработанный 20\80 4356, крашенный 20\100 7652, конический 20\120 6743, скошенный 30\150 98711)"
Надо разбить в разные ячейки:
4356|Болт обработанный||20\80
7652|Болт крашенный||20\100
и т.д.
Здравствуйте, Дмитрий.
Откуда я знаю, как должно быть, и где у вас пробел встречается.
Покажите свой код, скажите, что пытаетесь сделать, - тогда подскажу вам, как правильно написать код.
У меня когда встречает пробел, просто удаляет все после пробела (вместе с пробелом).
Так и должно быть?
Где так прогать научится, ато на работе по мелочи макросы нужны. Человек шарит, молодец. :-)
Отправить комментарий