【问题标题】:Trying to split a single cell with multiple variables尝试拆分具有多个变量的单个单元格
【发布时间】:2016-06-02 16:02:24
【问题描述】:

我有一些非 Microsoft 文件,其外观如下:

>gibberish that changes AAARRGGGHHHH

现在,我有一个代码可以从中创建一个新的 .xlsx 文件,以便使用 Trying to convert files while keeping the old name 进行拆分。

但是,我希望将“A2”单元格内容拆分为每个单独的字母分配一个单元格,然后删除以前的内容。我不介意这是否会在 A3 直到 AZ 结束。

因此,我想将上面的示例转换为:

>gibberish that changes
A A A R R G G G H H H H

为了澄清“改变的胡言乱语”不是一个常数,它会根据每个文件而改变,我有这里表示的内容。第二行也是如此。

基于Split cell string into individual cells

我试过这段代码:

Dim sVar1 as string
Dim sVar2 as string

I = InStr(1, strX, "A" & "R" & "G" & "H")

sVar1 = mid(strX, 1, I)
sVar2 = mid(strx,i+1)

但是,这不会产生任何结果。它不会导致宏失败(因为我没有收到错误消息并且宏的其余部分有效(将文件更改为另一种格式并更改名称),但它没有做任何事情。我想使用字符串因为文件在单元格 A2 中的内容和顺序不断变化。

我也没有真正的分隔符,因为像 ARRGHHHH 之类的东西被写成一个单词,这是导致问题的原因吗?

【问题讨论】:

  • have no true delimiter as things like ARRGHHHH is written as one word, is that causing the issue? 是的,是的 XD
  • AAARRGGGHHH 的预期结果是什么?
  • 你考虑过正则表达式吗?

标签: vba excel split delimiter


【解决方案1】:

我的 0.02 与 Character 对象

Sub main()
    With Range("A2")
        For i = 1 To Len(.Value)
            .Offset(, i) = .Characters(i, 1).Text
        Next i
    End With
End Sub

【讨论】:

  • 就像@Gary 的学生一样,这几乎可以满足我的需求,但并非完全如此。它确实让我更进一步,谢谢。
  • 我明白了。但你真正想要的是什么?
【解决方案2】:

这会将 A2 解析为其字符并将字符放在 A2 旁边,每个字符都在自己的单元格中:

Sub dural()
With Range("A2")
    v = .Value
    L = Len(v)
    For i = 1 To L
        .Offset(0, i).Value = Mid(v, i, 1)
    Next i
End With
End Sub

编辑#1:

这将处理一系列输入单元格和原始输入数据的清除。之前:

新宏:

Sub dural2()
    Dim rng As Range, r As Range, v As Variant
    Dim L As Long, i As Long
    Set rng = Range("A2:A40")
        For Each r In rng
        v = r.Value
        L = Len(v)
        For i = 1 To L
            r.Offset(0, i - 1).Value = Mid(v, i, 1)
        Next i
    Next r
End Sub

结果:

【讨论】:

  • 这看起来几乎像我想要的那样,但我希望 A2 消失。这一切都是为了创建一个新文件(我有一个工作宏)。
  • 通过添加新宏并在新宏中调用它们来管理。谢谢。
  • 很高兴您找到了解决方案!
  • 我遇到了一个小障碍。我发现有些文件有更多的信息行,我以为它只存储在 A2 上...所以我尝试使用 Range("A2:A40") 更改您的代码,但是失败了,如果我更改了值v 的长度与最长的行(即 A2)一样长,它也在第 3 行及以后重复 A2 行......我可以通过为每一行重复此代码来使其工作,但这可以做得更多优雅吗?
  • 首先澄清 A2 问题............你希望 A2empty 还是您希望 A2 最终包含 第一个字符 以及包含其他字符的相邻单元格。
【解决方案3】:

这会有帮助吗?

Sub Test()

Dim i As Integer
Dim num As Integer

num = Len(Range("A1"))

For i = 1 To num
    Debug.Print Mid(Range("A1"), i, 1)
Next

End Sub

【讨论】:

  • 解析宏时没有给出错误,但它似乎没有做任何事情。即使我将范围更改为 A2。
  • @GMV 抱歉,这是打印到即时窗口的通用代码。只是为了演示如何拆分Range("A1")中的非分隔词。让我知道如何处理它,我可以调整代码。即时窗口位于 Visual Basic 编辑器中。去那里然后按ctrl + G
【解决方案4】:

试试这个。

    Sub dural()
    With Range("A2")
        v = .Value
        L = Len(v)
        For i = 0 To L - 1
            If i = 0 Then
                .Offset(0, i).Value = Left(v, 1)

            Else
                .Offset(0, i).Value = Mid(v, i, 1)
            End If
        Next i
    End With
    End Sub

Input

output

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多