在excel中分割string(vba)

我正在使用这个代码(来自这里的一个同伴)来查找列b1中的每个单元格,并find包含“;”的单元格。 像“你好;再见”。 该代码将拆分单元格的“;” 把“再见”直接放在“你好”之下 在一个全新的行

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

我需要做些什么改变?

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 

我知道它接近你的,但我想build议你使用Application.ScreenUpdating。 这将节省相当多的时间,特别是在Excel中插入/删除行时。 我也想build议你改变variables名称,以使其更有意义。

 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 

PS较小的改动是使用“B”的“2”instad。 如果你使用单元格()而不是Range(),不妨一路走下去:)

我在那find了答案

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

这是我得到的解决scheme:

 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