【问题标题】:Split strings in excel (vba)在excel(vba)中拆分字符串
【发布时间】:2012-01-04 02:33:05
【问题描述】:

我目前正在使用此代码(来自其他用户)来查找 b1 列中的每个单元格并查找包含“;”的单元格比如“你好;再见”。代码将在“;”处拆分单元格并将“再见”直接放在“你好”下方;在一个全新的行上..

我现在需要的是...如果一个单元格包含 多个 ";" (即“你好;再见;哟;嗨;嘿”)它将在每个“;”处分裂不只是第一个,然后将每个移到另一个正下方的新行...

我需要做哪些改变?

Dim r1 As Range, r2 As Range
Dim saItem() As String


For Each r1 In ActiveSheet.Range("B1", Cells(Application.Rows.Count, 2).End(xlUp))
If InStr(1, r1.Value2, ";") > 0 Then
saItem = Split(r1.Value2, ";")
r1 = Trim$(saItem(0)) & ";"
r1.Offset(1).EntireRow.Insert (xlDown)
r1.Offset(1) = Trim$(saItem(1))
End If
Next r1

【问题讨论】:

  • 你已经有了。它被分成saItem 数组(请注意,您的代码已经检索到saItem(0)saItem(1))。您所要做的就是迭代数组的元素,在每个元素上调用 Trim$ 并将它们放入正确的行(就像您的代码已经为第一个元素所做的那样)。
  • 如果您有答案,请将其放入答案框中并从您的问题中删除,然后将其标记为答案。

标签: vba excel replace


【解决方案1】:

我知道它与您所拥有的很接近,但我想建议您使用 Application.ScreenUpdating。这将节省大量时间,尤其是在 Excel 中插入/删除行时。我还想建议您将变量名称更改为更有意义的名称。

Sub SplitCells()

Application.ScreenUpdating = False
Dim strings() As String
Dim i As Long

For i = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
    If InStr(Cells(i, 2).Value, ";") <> 0 Then
        strings = Split(Cells(i, 2).Value, ";")
        Rows(i + 1 & ":" & i + UBound(strings)).Insert
        Cells(i, 2).Resize(UBound(strings) + 1).Value = _
        WorksheetFunction.Transpose(strings)
    End If
Next

Application.ScreenUpdating = True

End Sub

附:较小的改动是使用“2”代替“B”。如果您使用的是 cells() 而不是 Range(),不妨一路走下去 :)

【讨论】:

    【解决方案2】:

    我找到了答案

    http://www.excelforum.com/excel-programming/802602-vba-macro-to-split-cells-at-every.html

    这是我得到的解决方案:

    Sub tgr()
    
    Dim rindex As Long
    Dim saItem() As String
    
    For rindex = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
        If InStr(Cells(rindex, "B").Value, ";") > 0 Then
            saItem = Split(Cells(rindex, "B").Value, ";")
            Rows(rindex + 1 & ":" & rindex + UBound(saItem)).Insert
            Cells(rindex, "B").Resize(UBound(saItem) + 1).Value =     WorksheetFunction.Transpose(saItem)
        End If
    Next rindex
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多