Excel转换逗号向下与其他列

我正在尝试这样做: 样本数据

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

必须有一个更简单的方法:(

我在评论中声称,你也可以通过一些辅助栏的公式来做到这一点,并希望看到(a)如果这是真的,(b)这将是多么困难。 答案是(a)是的,只是和(b)非常(虽然有些人比我更擅长复杂的公式)。

结果如下: –

在这里输入图像说明

所以帮手列就像我和J在VBA里一样

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$2:B$4,C7))-LEN(SUBSTITUTE(INDEX(B$2:B$4,C7),",",""))+1,D7+1,IF(C7=ROWS($B$2:$B$4),"",1))) 

在C8中: –

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

在B7中: –

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

在A7: –

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

它是半dynamic的,因为对源单元格的任何更改都会反映在目标单元格中​​。 它被绑定到一个固定的源代码范围$ B $ 2:$ B $ 4,但可以很容易地更改为可变源范围。 我没有假设这些数字都有7位数字,但是如果你这样做了,它将简化B7中的公式。

我想知道如何与公式做比较的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