Страницы: 1
RSS
Разделение текста в ListBox по столбцам
 
Люди сведущие, помогите! Нужно текст из первой колонки листбокса разделить на четыре слова по разделителю "_" и вставить эти слова в четыре колонки справа.
 
Вставить на лист или в столбцы ListBox? Судя по наличию столбцов - в ListBox.
 
да, вставить в столбцы листбокса
 
См. вариант.
 
Юрий М, бесподобно, спасибо!
 
Код
Private Sub CommandButton1_Click()
Dim aSpl
Dim i As Long
    With ListBox1
        For i = 0 To .ListCount
            aSpl = Split(.List(i, 0), "_")
            .List(i, 0) = aSpl(0): .List(i, 2) = aSpl(1)
            .List(i, 3) = aSpl(2): .List(i, 4) = aSpl(3)
        Next i   
    End With
End Sub
 
0, 2, 3, 4 - Вить, куда заначил единичку? )
 
А я так понял
Цитата
sasch78 написал: текст из первой колонки ... и вставить эти слова в четыре колонки справа.
Код
Private Sub UserForm_Initialize()
Dim arr(), arrList(), I&, J&, iStr
On Error Resume Next
With Worksheets("1")
    arr = Intersect(.UsedRange, .Range("База")).Value
End With
ReDim arrList(1 To UBound(arr), 0 To 1)
For I = 1 To UBound(arr)
    iStr = Split(arr(I, 1), "_")
    If UBound(iStr) > UBound(arrList, 2) Then
        ReDim Preserve arrList(1 To UBound(arr), 0 To UBound(iStr) + 1)
    End If
    arrList(I, 0) = arr(I, 1)
    For J = 0 To UBound(iStr)
        arrList(I, J + 1) = iStr(J)
    Next
Next
Me.ListBox1.List = arrList
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Выпала. Пусть автор у себя запасную найдет :)
 
vikttur, ваш вариант мне тоже очень нужен, но он ругается на:
Код
.List(i, 0) = aSpl(0)
 
Вариант не зависящий от кол-ва разделителей в исходной строке
Код
Private Sub UserForm_Initialize()
Dim arr(), arrList(), I&, J&, iStr
On Error Resume Next
With Worksheets("1")
    arr = Intersect(.UsedRange, .Range("База")).Value
End With
ReDim arrList(1 To UBound(arr), 0 To 1)
For I = 1 To UBound(arr)
    iStr = Split(arr(I, 1), "_")
    If UBound(iStr) + 1 > UBound(arrList, 2) Then
        ReDim Preserve arrList(1 To UBound(arr), 0 To UBound(iStr) + 1)
    End If
    arrList(I, 0) = arr(I, 1)
    For J = 0 To UBound(iStr)
        arrList(I, J + 1) = iStr(J)
    Next
Next
With Me.ListBox1
    .ColumnCount = UBound(arrList, 2) + 1
    For I = 1 To .ColumnCount
        iWidth = IIf(iWidth <> Empty, iWidth & ";100", "200")
    Next
    .ColumnWidths = iWidth
    .List = arrList
End With
End Sub
Согласие есть продукт при полном непротивлении сторон
 
круто, Sanja, спасибо огромное! уже не знаю что и выбрать) в моем случае, идеальным будет первый ваш вариант, но сохраню все, пригодится!
 
Цитата
sasch78 написал: уже не знаю что и выбрать
Тут принципиальный вопрос. Вам в первом столбце ListBox'а нужна исходная строка, не разделенная по разделителям или нет?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Вам в первом столбце ListBox'а нужна исходная строка, не разделенная по разделителям или нет?
предпочтительнее, если она будет, поэтому и выбрал ваш вариант... спасибо еще раз!
 
Значит я правильно понял  :)  
Согласие есть продукт при полном непротивлении сторон
 
Цитата
sasch78 написал:  ваш вариант... ругается...
А это Вы не видели?
Цитата
Юрий М написал: 0, 2, 3, 4 - ...куда заначил единичку? )
Цитата
vikttur написал: Выпала. Пусть автор у себя запасную найдет
 
vikttur, да, в тот момент еще не увидел; потом разобрался, спасибо! просто переключился тогда на варианты Sanja и забыл Вам ответить)
Страницы: 1
Наверх