Я хотел бы напечатать каждую подстроку между «...» из этой строки: «... covid ... is ... очень ... страшно» в последовательных ячейках в столбце в Excel.

Это мой код на VBA.

Sub copyd()

findandcopy("...covid...is...very...scary")     'not sure how to print in consecutive cells of a column
 
End Sub
Function findandcopy(brokenstr As String) As String
 
Dim first, second As Integer
Dim strtarget as string

strtarget = "..."
 
Do until second =0.   'second=0 so that loop ends when there is no more "..." found

  first = InStr(brokenstr, strtarget)
  second = InStr(first + 3, brokenstr, strtarget)
  findandcopy = Mid(purpose, first +3, second - first -3)      'referred to https://stackoverflow.com/questions/2543225/how-to-get-a-particular-part-of-a-string#_=_
  first = second         'so that loop can find next "..."
Loop

 
End Function

Может кто-нибудь посоветовать? Спасибо за помощь :)

0
newtocodingyikes 19 Май 2021 в 14:53

2 ответа

Лучший ответ

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

Option Explicit

Sub copyd()
    Dim arr As Variant
    
    ' get splitted text into horizontal array arr()
    arr = Split("...covid...is...very...scary", "...")
    
    If UBound(arr) > 0 Then ' if there is something in the array, display it on the sheet
        ' put onto sheet values from transposed array arr()
        ThisWorkbook.Worksheets(1).Range("A1"). _
            Resize(UBound(arr) + 1, 1).Value = _
            WorksheetFunction.Transpose(arr)
    End If
End Sub

enter image description here

0
Алексей Р 19 Май 2021 в 14:00

Ах, почему бы просто не разделить строку на "..."?

Подобно:

Function findandcopy(brokenstr As String, targetStr as string)

dim substr()    

if instr(1, brokenstr, targetStr, vbTextCompare) > 0 then
    'brokenstr has at least one instance of targetStr in it

     brokenstr2 = split(brokenstr,targetStr)
     
     if brokenstr2(0) = "" then
         redim substr(ubound(brokenstr2)-1)
         iStart = 1
     else
         redim substr(ubound(brokenstr2))
         iStart = 0
     end if

     for i = iStart to ubound(brokenstr2)
         substr(i-iStart) = brokenstr2(i)
     next i

else

    'No instances of targetStr in brokenstr
    redim substr(0)
    substr(0) = brokenstr

end if

findandcopy = substr

end function

Что вернет массив строк, которые являются битами между targetStr. Затем вы можете делать с ним все, что хотите, в родительском подпрограмме.

Если вы начнете сравнивать результаты и обнаружите проблемы - вы можете удалить пробелы, изменив приведенное выше значение:

substr(i) = trim(brokenstr2(i))

И ваш телефонный код:

Sub main()
Dim covid as string
Dim remove as string

covid = "...covid...is....very...scary"
'covid = "really...covid...is...very...scary" 'For testing
remove = "..."
rtn = findandcopy(covid, remove)

Конец суб

0
Amiga500 19 Май 2021 в 15:06