【问题标题】:Function to split a string into multiple characters将字符串拆分为多个字符的函数
【发布时间】:2014-02-08 22:17:00
【问题描述】:

我想创建一个自定义函数,该函数采用选定的参数并将其内容拆分到不同的单元格上。

例子:

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

【问题讨论】:

  • VBA 用户定义函数不能更改其他单元格的值。也许您可以改用 WorkSheet_Change 事件,或者只将原始值保留在 A 列中,并在其他列中使用 Excel 公式来保存单独的字母。附带说明一下,请尝试使用 Mid 函数,而不是 LeftRight

标签: vba excel


【解决方案1】:
  1. 在单元格 A1 中输入要拆分的内容。
  2. 将其粘贴到单元格 B1 中:=MID($A$1,COLUMN()-COLUMN($B$1)+1,1)
  3. 向右拖动

【讨论】:

    【解决方案2】:

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

    =MID(A1,COLUMN()-COLUMN($B$1)+1,1))

    【讨论】:

      【解决方案3】:

      试试=MID($A1,COLUMNS($A$1:A$1),1),然后向左拖动它就会来。

      【讨论】:

        【解决方案4】:

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

        2) 然后将此函数粘贴到您想要的任何单元格中 (image)

        =MID($A1;COLUMN(A1)-COLUMN($A1)+1;1)
        

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

        4) 单击并按住填充柄,向右拖动以填充系列(image

        【讨论】:

        • 这似乎与@rbhattad 给出的答案相同。我建议不要在 SO 之外大量使用图像。
        • @Scorpioo590 虽然我 100% 同意您的观点,即这是一个“重复”的答案,但请记住“i.stack.imgur.com”是 SO 用于两个链接的网站和嵌入的图像。
        【解决方案5】:

        从工作表调用此 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
        

        如何使用:

        1. 选择目标范围(例如B1:F1
        2. 选择范围在公式栏中输入公式=SplitWord(A1)
        3. CTRL+SHIFT+ENTER 进行评估

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

        【讨论】:

        • 没有真正起作用,不幸的是它只呈现第一个字母
        • 有没有办法让函数内的变量成为全局变量?
        • 你选择了 B1:F1 并在我写的时候按了 CTRL+SHIFT+ENTER 吗?
        • 工作完美..但我不想选择任何东西,因为我有一个单词列表,每个单词包含不同数量的字母,所以对所有单词都做同样的事情没有用!
        • 是否需要用户定义的函数或宏也适合?
        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2011-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-08
          相关资源
          最近更新 更多