Разделить строку на несколько ячеек - PullRequest
0 голосов
/ 29 октября 2019

У меня есть проблема.

У меня есть это:

("boufous; othman; 212544; casa")

Я хочуразбить эту ячейку на несколько ячеек, например:

cell[1]=boufous cell[2]=othman cell[3]=212544 cell[4]=casa

For Each olMailItem In olItems
   //Code here

    i = i + 1

Next olMailItem

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Мне действительно нравится работать двумя способами, если вам нужно использовать VBA. Представьте себе следующие данные:

enter image description here

1. Split

Asсогласно приведенным комментариям, вы можете использовать функцию Split. Настоящим небольшой скрипт, который показывает, как вы могли бы подойти к этому с использованием небольшого цикла:

Sub UseSplit()

Dim arr As Variant
Dim lr As Long, x As Long

With Sheet1 'Change CodeName accordingly
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("A1:A" & lr)
    For x = LBound(arr) To UBound(arr)
        .Cells(x, 2).Resize(1, UBound(Split(arr(x, 1), ";")) + 1) = Split(arr(x, 1), ";")
    Next x
End With

End Sub

enter image description here

2. TextToColumns

Второй подход заключается в использовании встроенной функции для записи текста с разделителями в другие столбцы с использованием функции TextToColumns. Это не будет включать цикл. Под небольшим примером:

Sub UseSplit()

Dim rng As Range
Dim lr As Long

With Sheet1 'Change CodeName accordingly
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng = .Range("A1:A" & lr)
    rng.TextToColumns Destination:=.Range("B1"), Semicolon:=True
End With

End Sub

Преимущество этого состоит в том, что, тогда как Split будет возвращать массив строковых значений, текст в столбцы не будет:

enter image description here

Значения, которые должны быть числовыми, на самом деле являются числовыми.

Остается вопрос, действительно ли вам нужно работать через VBA? В любом случае, удачи в вашем проекте =)

0 голосов
/ 29 октября 2019

Принимая olMailItem в виде строки и ниже код

Dim str1, str2
olMailItem = "boufous;othman;212544;casa"
str1 = Split(olMailItem, ";")
str2 = UBound(str1)
For i = 0 To str2
    Debug.Print str1(i)
Next i
...