Excel 转换逗号向下分隔 WITH 其他列

Excel convert comma seperated downwards WITH other columns

我正在尝试这样做:

要做到这一点还有很长的路要走: 突出显示 B 中的 1 个单元格。文本到列。复制输出中的所有单元格。使用转置粘贴。然后拖动A列向下填空

一定有更简单的方法:(

我想知道 VBA 与使用公式进行比较如何。

这是一个示例 VBA,它很短,尽管可能有更聪明的方法:-

Option Explicit
Public Sub SplitRows()

Dim a() As String
Dim r1, r2 As Range
Dim i, j, k As Integer
Set r1 = Range("A2:B4")
Set r2 = Range("A7:B1000")
j = 1

For i = 1 To r1.Rows.Count
    a = Split(r1.Cells(i, 2), ",")
    For k = LBound(a) To UBound(a)
      r2.Cells(j, 1) = r1.Cells(i, 1)
      r2.Cells(j, 2) = a(k)
      j = j + 1
    Next k
Next i

End Sub

我在评论中声称您也可以通过带有几个辅助列的公式来做到这一点,并且想看看 (a) 这是否属实以及 (b) 这样做会有多困难。答案是 (a) 是的,差不多和 (b) 非常(尽管有些人比我更擅长复杂的公式)。

结果如下:-

所以辅助列就像 VBA 中的 i 和 j,其中

Column C (i) is source row
Column D (j) is string number within source row

但要实现这一点,您需要一些长公式。

C7 和 C8 只是硬编码为 1。

在 D8 中:-

=IF(C7="","",IF(D7<LEN(INDEX(B:B,C7))-LEN(SUBSTITUTE(INDEX(B:B,C7),",",""))+1,D7+1,IF(C7=ROWS($B:$B),"",1)))

在 C8 中:-

=IF(D8="","",IF(D8>D7,C7,C7+1))

在B7中:-

=IF(C7="","",MID(","&INDEX(B:B,C7)&",",FIND("<",SUBSTITUTE(","&INDEX(B:B,C7)&",",",","<",D7))+1,FIND(">",SUBSTITUTE(","&INDEX(B:B,C7)&",",",",">",D7+1))-FIND("<",SUBSTITUTE(","&INDEX(B:B,C7)&",",",","<",D7))-1))

在A7中:-

=IF(C7="","",INDEX($A:$A,C7))

它是半动态的,因为对源单元格的任何更改都会反映在目标单元格中​​。它与固定源范围 $B$2:$B$4 相关联,但可以很容易地更改为使用可变源范围。我没有假设所有数字都是 7 位数字,但如果你这样做会简化 B7 中的公式。