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 中的公式。
我正在尝试这样做:
要做到这一点还有很长的路要走: 突出显示 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 中的公式。