使用excel从特定字符中删除序列

使用excel从特定字符中删除序列,excel,vba,Excel,Vba,我有6列和65000个单元格,其中大部分是相同的内容; A1=电气~照明~手电筒~灯笼~Fulton~防水 F4=电气~照明~手电筒~灯笼~Fulton~防水 我希望每个栏目分别有“电气、照明、手电筒、灯笼、富尔顿、防水”字样,因此结果是每个栏目上都有每个名字 多谢各位 Alex在VBA中,您可以使用Split()函数,但它不能作为工作表函数使用。 否则,这将是Excel内置的:菜单数据,选项文本到列 如果需要对其进行编程,请使用录音机,如果遇到问题,请返回编程问题。在VBA中,您可以使用Sp

我有6列和65000个单元格,其中大部分是相同的内容; A1=电气~照明~手电筒~灯笼~Fulton~防水

F4=电气~照明~手电筒~灯笼~Fulton~防水

我希望每个栏目分别有“电气、照明、手电筒、灯笼、富尔顿、防水”字样,因此结果是每个栏目上都有每个名字

多谢各位


Alex

在VBA中,您可以使用Split()函数,但它不能作为工作表函数使用。
否则,这将是Excel内置的:菜单
数据
,选项
文本到列


如果需要对其进行编程,请使用录音机,如果遇到问题,请返回编程问题。

在VBA中,您可以使用Split()函数,但它不能作为工作表函数使用。
否则,这将是Excel内置的:菜单
数据
,选项
文本到列


如果需要编程,请使用录音机,如果遇到问题,请返回编程问题。

这里有一种使用VBA和双重转置数组的方法(非常巧妙的技巧)。 UDPATE:无需双重转置阵列(谢谢,JFC!)。固定代码

Sub SplitEmUp()

Application.ScreenUpdating = False
Dim lastRow As Long
Dim cell As range
Dim items As Variant

lastRow = range("A" & Rows.count).End(xlUp).Row

For Each cell In range("A1:A" & lastRow)
    If InStr(cell, " ~ ") Then
        items = Split(cell, " ~ ")
        range(cell.Address).Resize(, UBound(items)).Value = items
    End If
Next

Application.ScreenUpdating = True
End Sub

这里有一种使用VBA和双重转置数组的方法(非常巧妙的技巧)。 UDPATE:无需双重转置阵列(谢谢,JFC!)。固定代码

Sub SplitEmUp()

Application.ScreenUpdating = False
Dim lastRow As Long
Dim cell As range
Dim items As Variant

lastRow = range("A" & Rows.count).End(xlUp).Row

For Each cell In range("A1:A" & lastRow)
    If InStr(cell, " ~ ") Then
        items = Split(cell, " ~ ")
        range(cell.Address).Resize(, UBound(items)).Value = items
    End If
Next

Application.ScreenUpdating = True
End Sub


这似乎是rent-a-coder.com的一个问题,不是吗?我不这么认为。我只是想找出一个公式,让我在VBA中为每个列分隔每个名称,使用Split()函数我使用的是替换(B24,“~”,“@”,LEN(B24)-LEN(替换(B24,“~”,”))但是没有yetyes,我在vb中尝试了这个函数(函数PullAfterLast(rCell作为范围,strLast作为字符串)PullAfterLast=Mid(rCell,InStrRev(rCell,strLast)+1256)结束函数),但不起作用这看起来像是rent-a-coder.com的问题,不是吗?我不这么认为。我只是想找出一个公式,让我在VBA中为每个列分隔每个名称,使用Split()函数我使用的是替换(B24,“~”,“@”,LEN(B24)-LEN(替换(B24,“~”,”))但是没有yetyes,我在vb中尝试了这个函数(函数PullAfterLast(rCell作为范围,strLast作为字符串)PullAfterLast=Mid(rCell,InStrRev(rCell,strLast)+1256)结束函数),但没有work@user1229266:欢迎使用stackoverflow,如果此答案适合您,请单击答案左侧的勾号接受此答案-有关更多信息,请参阅information@user1229266:欢迎来到stackoverflow,如果这个答案适合你,请通过点击答案左边的勾号来接受它-更多信息请参阅双转置是一个很好的技巧,但在这种特殊情况下是无用的。。。但是+1让我注意到,
Resize
有可选参数!我不知道我有多少次挣扎于调整大小,因为我不知道这一点。单转置将垂直-要水平转置,您需要将其加倍(据我所知)。)是的,但是默认情况下一维数组是水平的!所以你要用一个水平的数组开始,使它垂直,然后再使它水平。。。不妨跳过双重转置。为了说服自己,请尝试
[…].Value=items
。此外,如果希望简洁,还可以将
应用程序.WorksheetFunction.Transpose
编写为
工作表函数.Transpose
——甚至是
应用程序.Transpose
,据我所知,它还没有文档化。。。永远不明白为什么!令人惊叹的。谢谢你的提示,JFC!双转置是一个巧妙的技巧,但在这种特殊情况下是无用的。。。但是+1让我注意到,
Resize
有可选参数!我不知道我有多少次挣扎于调整大小,因为我不知道这一点。单转置将垂直-要水平转置,您需要将其加倍(据我所知)。)是的,但是默认情况下一维数组是水平的!所以你要用一个水平的数组开始,使它垂直,然后再使它水平。。。不妨跳过双重转置。为了说服自己,请尝试
[…].Value=items
。此外,如果希望简洁,还可以将
应用程序.WorksheetFunction.Transpose
编写为
工作表函数.Transpose
——甚至是
应用程序.Transpose
,据我所知,它还没有文档化。。。永远不明白为什么!令人惊叹的。谢谢你的提示,JFC!