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