Excel 拆分单元格中的文本字符串并使其与多列关联

Excel 拆分单元格中的文本字符串并使其与多列关联,excel,excel-formula,excel-2010,excel-2007,vba,Excel,Excel Formula,Excel 2010,Excel 2007,Vba,我有一个要拆分的文本字符串。但在拆分字符串的同时,我需要它提取与之关联的以下数据。我试过转置,也试过分割函数。但它不能做我需要它做的事。任何我可以尝试的想法或建议。以下是我试图实现的一个示例: 这就是我目前所做的,并从第一段代码中进行了更改和尝试修改。还是不明白: Sub Test() Dim rng As Range, Lstrw As Long, c As Range, d As Range Dim SpltRng As Range Dim i As Integer Dim j As In

我有一个要拆分的文本字符串。但在拆分字符串的同时,我需要它提取与之关联的以下数据。我试过转置,也试过分割函数。但它不能做我需要它做的事。任何我可以尝试的想法或建议。以下是我试图实现的一个示例:

这就是我目前所做的,并从第一段代码中进行了更改和尝试修改。还是不明白:

Sub Test()
Dim rng As Range, Lstrw As Long, c As Range, d As Range
Dim SpltRng As Range
Dim i As Integer
Dim j As Integer
Dim Orig As Variant
Dim txt As String

Lstrw = Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Range("A2:A" & Lstrw)

For Each c In rng.Cells
    Set SpltRng = c.Offset(, 1)
    txt = SpltRng.Value
    Orig = Split(txt, ",")

Lstrw = Cells(Rows.Count, "B").End(xlUp).Row
Set rng = Range("B2:B" & Lstrw)

For Each d In rng.Cells
Set SpltRng = d.Offset(, 1) + 1


    For i = 0 To LBound(Orig)
        Cells(Rows.Count, "L").End(xlUp).Offset(1) = c
        Cells(Rows.Count, "L").End(xlUp).Offset(, 1) = Orig(i)

      For j = 0 To LBound(Orig)
        Cells(Rows.Count, "L").End(xlUp).Offset(1) = d
        Cells(Rows.Count, "L").End(xlUp).Offset(, 1) = Orig(j)
            Next j

         Next i

       Next d
   Next c

 End Sub

您想得太多了,只需在@DaveExcel提供的代码中添加一行即可:

Sub ChickatAH()
Dim rng As Range, Lstrw As Long, c As Range
Dim SpltRng As Range
Dim i As Integer
Dim Orig As Variant
Dim txt As String

Lstrw = Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Range("A2:A" & Lstrw)

For Each c In rng.Cells
    Set SpltRng = c.Offset(, 1)
    txt = SpltRng.Value
    Orig = Split(txt, " ")

    For i = 0 To UBound(Orig)
        Cells(Rows.Count, "L").End(xlUp).Offset(1) = c
        Cells(Rows.Count, "L").End(xlUp).Offset(, 1) = Orig(i)
        'New Line
        Cells(Rows.Count, "L").End(xlUp).Offset(, 2).Resize(, 3).Value = c.Offset(, 2).Resize(, 3).Value
    Next i

Next c

End Sub

您想得太多了,只需在@DaveExcel提供的代码中添加一行即可:

Sub ChickatAH()
Dim rng As Range, Lstrw As Long, c As Range
Dim SpltRng As Range
Dim i As Integer
Dim Orig As Variant
Dim txt As String

Lstrw = Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Range("A2:A" & Lstrw)

For Each c In rng.Cells
    Set SpltRng = c.Offset(, 1)
    txt = SpltRng.Value
    Orig = Split(txt, " ")

    For i = 0 To UBound(Orig)
        Cells(Rows.Count, "L").End(xlUp).Offset(1) = c
        Cells(Rows.Count, "L").End(xlUp).Offset(, 1) = Orig(i)
        'New Line
        Cells(Rows.Count, "L").End(xlUp).Offset(, 2).Resize(, 3).Value = c.Offset(, 2).Resize(, 3).Value
    Next i

Next c

End Sub

您是否尝试修改问题中给出的代码?如果是,请显示您试图更改的内容。编辑您的原始帖子,至少向您展示它。字符串拆分和联接函数是解决此类问题的最佳方法。请张贴您尝试过的内容、结果,如果不明显,请指出问题所在。谢谢。为什么拆分字符串“test1 test2 test3”会导致c7、c8和c9成为历史(原始字符串所在的第2行的原始值),而字符串“Tim Robert”会导致c10成为Tim,c11成为Robert,而不是“People”,这是第3行的原始数据?请解释确定C列新值的算法。您是否尝试修改问题中给出的代码?如果是,请显示您试图更改的内容。编辑您的原始帖子,至少向您展示它。字符串拆分和联接函数是解决此类问题的最佳方法。请张贴您尝试过的内容、结果,如果不明显,请指出问题所在。谢谢。为什么拆分字符串“test1 test2 test3”会导致c7、c8和c9成为历史(原始字符串所在的第2行的原始值),而字符串“Tim Robert”会导致c10成为Tim,c11成为Robert,而不是“People”,这是第3行的原始数据?请解释确定C列新值的算法。感谢@ScottCraner的帮助。你有什么想法或建议可以让我自己学习更多VBA吗?@Sam有用吗?如果是,请标记为正确。至于在哪里学习,我大部分时间都是在网上学习的。这是一个在谷歌学习正确问题的问题。与其试图了解整个情况,不如把它分解成几个部分。例如,您的第一个问题,如何在vba中循环?接下来如何拆分文本字符串vba?当你想做某事时,想想这些步骤,然后用谷歌搜索这些步骤。谢谢你的帮助@ScottCraner。你有什么想法或建议可以让我自己学习更多VBA吗?@Sam有用吗?如果是,请标记为正确。至于在哪里学习,我大部分时间都是在网上学习的。这是一个在谷歌学习正确问题的问题。与其试图了解整个情况,不如把它分解成几个部分。例如,您的第一个问题,如何在vba中循环?接下来如何拆分文本字符串vba?当你想做某事时,想想这些步骤,然后用谷歌搜索这些步骤。