下午好,
我遇到一个问题,即我的用户拥有多个银行帐户详细信息。我需要尝试为每个拥有多个银行帐户的员工创建一个新行,并为第二个银行帐户分配一个新行。
Employee Number User ID BSB Account number
10000591 WOODSP0 306089,116879 343509,041145273
10000592 THOMSOS0 037125 317166
我需要它看起来像这样:
Employee Number User ID BSB Account number
10000591 WOODSP0 306089 343509
10000591 WOODSP0 116879 041145273
10000592 THOMSOS0 037125 317166
有什么想法?非常感谢您的意见!
屏幕截图在这里展示:
答案 0 :(得分:1)
右键单击选项卡,然后选择"查看代码"
将此代码粘贴到:
Sub SplitOnAccount()
Dim X As Long, Y As Long, EmpNo As String, UserID As String, BSB As Variant, AccNo As Variant
Range("F1:I1") = Application.Transpose(Application.Transpose(Array(Range("A1:D1"))))
For X = 2 To Range("A" & Rows.Count).End(xlUp).Row
EmpNo = Range("A" & X).Text
UserID = Range("B" & X).Text
BSB = Split(Range("C" & X).Text, ",")
AccNo = Split(Range("D" & X).Text, ",")
For Y = LBound(AccNo) To UBound(AccNo)
Range("F" & Range("F" & Rows.Count).End(xlUp).Row).Offset(1, 0).Formula = EmpNo
Range("G" & Range("G" & Rows.Count).End(xlUp).Row).Offset(1, 0).Formula = UserID
Range("H" & Range("H" & Rows.Count).End(xlUp).Row).Offset(1, 0).Formula = BSB(Y)
Range("I" & Range("I" & Rows.Count).End(xlUp).Row).Offset(1, 0).Formula = AccNo(Y)
Next
Next
End Sub
关闭窗口返回excel
按ALT-F8
选择SplitOnAccount并单击“运行”。
注意,这将把拆分数据填充到行F到I,确保那里没有任何内容。如果有回复,我们可以改变它。
在运行它之前,还要将列F-I格式化为文本,否则Excel将删除前导零,因为它会将其解释为数字。
答案 1 :(得分:1)
这是另一个看起来可以执行你想要的东西。
Sub stack_accounts()
Dim rw As Long, b As Long
Dim vVALs As Variant, vBSBs As Variant, vACTs As Variant
With ActiveSheet '<-define this worksheet properly!
For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
vVALs = .Cells(rw, 1).Resize(1, 4).Value
vBSBs = Split(vVALs(1, 3), Chr(44))
vACTs = Split(vVALs(1, 4), Chr(44))
If UBound(vBSBs) = UBound(vBSBs) Then
For b = UBound(vBSBs) To LBound(vBSBs) Step -1
If b > LBound(vBSBs) Then _
.Rows(rw + 1).Insert
.Cells(rw - (b > LBound(vBSBs)), 1).Resize(1, 4) = vVALs
.Cells(rw - (b > LBound(vBSBs)), 3).Resize(1, 2).NumberFormat = "@"
.Cells(rw - (b > LBound(vBSBs)), 3) = CStr(vBSBs(b))
.Cells(rw - (b > LBound(vBSBs)), 4) = CStr(vACTs(b))
Next b
End If
Next rw
End With
End Sub
我原本只会处理在C和D列中使用逗号分隔值的行,但我认为处理所有这些行将允许宏设置 Text 数字格式并摆脱 Number as text 错误警告,并在 041145273 中保持前导零。
答案 2 :(得分:0)
公式解决方案:
分隔符:可以是真正的分隔符,也可以是仅包含分隔符的单元格的绝对引用。
HelperCol:我必须使用辅助列才能使其正常工作。您需要提供专栏信。
StartCol:包含数据的第一列的列字母。
SplitCol:要拆分的列的列字母。
Formula1:用于生成不分割的第一列的公式。您可以填写此公式,然后填写右侧。
Formula2:用于生成要拆分的列的公式(仅支持拆分一列)。
Formula3:用于生成Helper列的公式。 (如果要拆分的列的标题包含分隔符,则必须手动将辅助列的第一个值更改为1.)
Formula1:=SUBSTITUTE(SUBSTITUTE("=LOOKUP(ROW(1:1),$J:$J,A:A)&""""","$J:$J","$"&B2&":$"&B2),"A:A",B3&":"&B3)
Formula2:=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("=MID($M$1&LOOKUP(ROW(A1),$J:$J,F:F)&$M$1,FIND(""艹"",SUBSTITUTE($M$1&LOOKUP(ROW(A1),$J:$J,F:F)&$M$1,$M$1,"&"""艹"",ROW(A2)-LOOKUP(ROW(A1),$J:$J)))+1,FIND(""艹"",SUBSTITUTE($M$1&LOOKUP(ROW(A1),$J:$J,F:F)&$M$1,$M$1,""艹"",ROW(A2)-LOOKUP(ROW(A1),$J:$J)+1))-FIND(""艹"",SUBSTITUTE($M$1&LOOKUP(ROW(A1),$J:$J,F:F)&$M$1,$M$1,""艹"",ROW(A2)-LOOKUP(ROW(A1),$J:$J)))-1)&""""","$M$1",IF(ISERROR(INDIRECT(B1)),""""&B1&"""",B1)),"$J:$J","$"&B2&":$"&B2),"F:F",B4&":"&B4)
Formula3:=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("=SUM(E1,LEN(B1)-LEN(SUBSTITUTE(B1,$H$1,"""")))+1","B1",B4&1),"$H$1",IF(ISERROR(INDIRECT(B1)),""""&B1&"""",B1)),"E1",B2&1)
帮助者必须填充比数据更多的行。
使用方法:
错误:
数字将转换为文字。当然,您可以删除公式末尾的&amp;“”,但空白单元格将填充0。
PS。这种方法可能很难理解。但是一旦掌握了它,解决相关问题就非常有用了。
答案 3 :(得分:0)
您绝对可以使用拆分列选项使用Power Query转换数据以生成新行。
选中this article会详细说明该过程。
我自己做的,它就像一种魅力。