VBA разбивает строковые предложения на несколько значений

#vba

Вопрос:

Мои необработанные данные Excel выглядят примерно так:

;123456p,Розы и бабочки;;124456h,Фиалки голубые;

;123456d,Привет, мир;

  • Ожидаемый результат:
  • Розы и бабочки
  • Фиалки голубые
  • Привет, мир

Пытаясь разделить только текстовые предложения, для строк с несколькими предложениями они понадобились бы мне в отдельных строках, возможно ли это вообще? Ниже приведено то, что я пробовал.

 Private Sub CommandButton1_click()
    Dim splitstring As String
    Dim myarray() As String
    splitstring = Worksheets("raw").Cells(1, 1).Value
    myarray = Split(splitstring, ";")
    For i = 0 To URound(myarray)

    Next

End Sub

Sub raw()

End Sub
 

Комментарии:

1. Не могли бы вы, пожалуйста, добавить ожидаемый результат один раз? чтобы мы могли подумать дальше?

2. добавил его туда, ожидаемый результат заключается в том, что каждое предложение переходит в отдельную строку в тех случаях, когда присутствуют несколько значений, поэтому оно будет увеличиваться на 1 каждый раз

Ответ №1:

С помощью регулярных выражений вы можете заполнить столбец B желаемыми результатами ae ниже

 Option Explicit

Private Sub CommandButton1_click()

Dim wSh As Worksheet
Dim rngStr As String, rngStrArr() As String, i As Long
Set wSh = Worksheets("raw")
Dim regEx As Object, mc As Object
Set regEx = CreateObject("vbscript.regexp")

regEx.Global = True
regEx.IgnoreCase = True

rngStr = Join(Application.Transpose(Application.Index(( _
        wSh.Range("A1:A" amp; wSh.Cells(wSh.Rows.Count, 1).End(xlUp).Row)), 0, 1)))
regEx.Pattern = ",([^;] );"
Set mc = regEx.Execute(rngStr)
rngStr = ""
For i = 0 To mc.Count - 1
    rngStr = rngStr amp; mc(i)
Next i

rngStr = Replace(rngStr, ",", "")

rngStrArr = Split(rngStr, ";")

wSh.Range("B1").Resize(UBound(rngStrArr), 1).Value = Application.Transpose(rngStrArr)

End Sub
 

введите описание изображения здесь

Ответ №2:

Попробуйте это:

 Private sub SplitString()
Dim splitstring As String
Dim myarray() As String
splitstring = Cells(1, 1).Value
myarray = Split(splitstring, ",")

For i = 1 To UBound(myarray)
    MsgBox (myarray(i))
Next 
End Sub
 

Комментарии:

1. говорит, что внешняя процедура недействительна

2. @patpat91 Заверните его в Sub ... End Sub . Индекс @DarrenPeterson в VBA начинается с 0. Лучше используйте эту LBound() функцию.