Vba 函数将字符串拆分为多个字符

Vba 函数将字符串拆分为多个字符,vba,excel,Vba,Excel,我想创建一个自定义函数,该函数接受所选参数并将其内容拆分到不同的单元格中 例如: A1=ABCDE 变成 B1=A、C1=B、D1=C、E1=D、F1=E 这就是我所尝试的: Function SplitWord(Word) NbCar = Len(Word) // get the number of cardinals of the text SplitWord = Left(Word, 1) // put the first letter in the cell that called th

我想创建一个自定义函数,该函数接受所选参数并将其内容拆分到不同的单元格中

例如:

A1=ABCDE

变成

B1=A、C1=B、D1=C、E1=D、F1=E

这就是我所尝试的:

Function SplitWord(Word)
NbCar = Len(Word) // get the number of cardinals of the text
SplitWord = Left(Word, 1) // put the first letter in the cell that called the function
t = NbCar - 1
For i = 1 To t
ActiveCell.Offset(0, i) = Right(Left(Word, i), 1)
Next
End Function

当从工作表调用此UDF时,您不能修改UDF中的单元格(实际上有可能的方法,但它们很复杂,我不建议使用它们)。您可以改为使用此函数:

Function SplitWord(Word As String) As String()
    Dim res() As String
    ReDim res(1 To Len(Word))
    For i = 1 To Len(Word)
        res(i) = Mid(Word, i, 1)
    Next
    SplitWord = res
End Function

如何使用它:

  • 选择目的地范围(例如
    B1:F1
  • 在选定范围内,在公式栏中输入公式
    =SplitWord(A1)
  • 按CTRL+SHIFT+ENTER键对其进行计算

  • 如果您的目标范围在一列中(例如
    B1:B5
    ),使用
    =TRANSPOSE(SplitWord(A1))

    在从工作表调用此UDF时,您不能修改UDF中的单元格(实际上有可能的方法,但它们很复杂,我不建议使用它们)。您可以改为使用此函数:

    Function SplitWord(Word As String) As String()
        Dim res() As String
        ReDim res(1 To Len(Word))
        For i = 1 To Len(Word)
            res(i) = Mid(Word, i, 1)
        Next
        SplitWord = res
    End Function
    

    如何使用它:

  • 选择目的地范围(例如
    B1:F1
  • 在选定范围内,在公式栏中输入公式
    =SplitWord(A1)
  • 按CTRL+SHIFT+ENTER键对其进行计算

  • 如果您的目标范围在一列中(例如
    B1:B5
    ),请使用
    =TRANSPOSE(SplitWord(A1))

    您也可以使用简单的Excel公式执行此操作-将此单元格放在B1中并复制到C1-F1:

    =MID(A1,COLUMN()-COLUMN($B$1)+1,1)) =中间(A1列()-列($B$1)+1,1))
    您也可以使用简单的Excel公式执行此操作-将此单元格放在B1中,并将其复制到C1-F1:

    =MID(A1,COLUMN()-COLUMN($B$1)+1,1)) =中间(A1列()-列($B$1)+1,1)) 试着把它拖到左边,它会来的。

    试着把它拖到中间($A1,COLUMNS($A$1:A$1),1),然后把它拖到左边,它会来的

  • 在单元格A1中输入要拆分的内容
  • 将其粘贴到单元格B1中:=MID($A$1,COLUMN()-COLUMN($B$1)+1,1)
  • 向右拖动
  • 在单元格A1中输入要拆分的内容
  • 将其粘贴到单元格B1中:=MID($A$1,COLUMN()-COLUMN($B$1)+1,1)
  • 向右拖动

  • 将其放置在任何第一行单元格中:
    =MID($1,ROW(),1)

    将其放置在任何第一行单元格中: =MID($1,ROW(),1)

    1)将要拆分的文本放入单元格A1()

    2) 然后将此函数粘贴到所需的任何单元格()

    3) 将鼠标光标移动到粘贴上述函数()的单元格右下角的小块上

    4) 单击并按住填充手柄,然后向右拖动以填充序列()

    1)将要拆分的文本放入单元格A1()

    2) 然后将此函数粘贴到所需的任何单元格()

    3) 将鼠标光标移动到粘贴上述函数()的单元格右下角的小块上


    4) 单击并按住填充手柄,然后向右拖动以填充序列()

    VBA用户定义函数无法更改其他单元格的值。也许您可以使用工作表更改事件,或者只保留a列中的原始值,并在其他列中使用Excel公式来保存单独的字母。请注意,尝试使用
    Mid
    函数,而不是
    Left
    Right
    。VBA用户定义函数不能更改其他单元格的值。也许您可以使用工作表更改事件,或者只保留a列中的原始值,并在其他列中使用Excel公式来保存单独的字母。作为旁注,请尝试使用
    Mid
    函数,而不是
    Left
    Right
    。如果不真正使用它,则只会令人遗憾地呈现第一个字母。是否有办法将函数中的变量设为全局变量?您是否选择了B1:F1,并按了我编写的CTRL+SHIFT+ENTER键?效果非常好。。但是我不想选择任何东西,因为我有一个单词列表,每个单词包含不同数量的字母,所以对所有单词都做相同的操作是没有用的!如果有必要,用户定义的函数或宏也将适用?它不会真正工作,只会渲染第一个字母不幸的是,有没有办法将函数中的变量设置为全局变量?您是否已选择B1:F1并按CTRL+SHIFT+ENTER(如我所写)键?工作正常。。但是我不想选择任何东西,因为我有一个单词列表,每个单词包含不同数量的字母,所以对所有单词都做相同的操作是没有用的!是否有必要让用户定义的函数或宏也适用?这似乎与@rbhattad给出的答案相同。我建议不要在SO之外大量使用图像。@Scorpio590尽管我100%同意你的观点,这是一个“重复”的答案,但请记住,“I.stack.imgur.com”是SO用于链接和嵌入图像的网站。这似乎是@rbhattad给出的相同答案。我建议不要在SO之外大量使用图像。@Scorpio590尽管我100%同意你的观点,即这是一个“重复”的答案,但请记住“I.stack.imgur.com”是SO用于链接和嵌入图像的网站。