简体   繁体   中英

VBA Split String Loop

I am trying to split a string and create a loop for going through the cells in the column.There are a few challenges:

  1. Split works for ActiveCell only.

  2. Loop goes through all cells until LastRow but populates all cells with split string values from ActiveCell only.

  3. Split of Array starts with i = 0 even though there is Option Base 1 at the beginning of the Module.

  4. How can I change the location of destination (eg instead of splitting string next to existing data, is there an option to manage column numbers)?

Thank you

Option Explicit
Option Base 1

Sub SplitStringLoop()

    Dim txt As String
    Dim i As Integer
    Dim y As Integer
    Dim FullName As Variant
    Dim LastRow As Single

    ReDim FullName(3)

    LastRow = Cells(Rows.Count, "A").End(xlUp).Row

    txt = ActiveCell.Value

    FullName = Split(txt, "-")

    For y = 2 To LastRow

            For i = 1 To UBound(FullName)

                Cells(y, i + 1).Value = FullName(i)

            Next i

   Next y

End Sub

Chris Nelisen outlined the reasons, I had this code written before he posted, so I'll post it anyway.

Option Explicit

Sub SplitStringLoop()

Dim txt As String
Dim i As Integer
Dim y As Integer
Dim FullName As Variant
Dim LastRow As Single

ReDim FullName(3)

LastRow = Cells(Rows.Count, "A").End(xlUp).Row

For y = 2 To LastRow
        Cells(y, 1).Select
        txt = ActiveCell.Value
        FullName = Split(txt, "-")
        For i = 0 To UBound(FullName)
           Cells(y, i + 2).Value = FullName(i)
        Next i
Next
End Sub

To address the issues you list

  1. Split acts on the string you pass to it. You are passing the active cell value to it.
  2. You don't update the result of split ( FullName ) inside the loop. So what else do you expect?
  3. Split Returns a zero-based, one-dimensional array . It says so right there in the help. Option Base 1 specifies the default lower bound, for when you don't specify it in a Dim statement.
  4. You are specifying the column in your code Cells(y, i + 1) ( i + 1 in this case). If you want it somewhere else, specify a different column.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM