#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()
функцию.