根据列数据创建新的Excel行

时间:2015-05-11 04:32:53

标签: excel

下午好,

我遇到一个问题,即我的用户拥有多个银行帐户详细信息。我需要尝试为每个拥有多个银行帐户的员工创建一个新行,并为第二个银行帐户分配一个新行。

Employee Number     User ID         BSB             Account number
10000591            WOODSP0         306089,116879   343509,041145273
10000592            THOMSOS0        037125          317166

Screenshot 1

我需要它看起来像这样:

Employee Number     User ID     BSB     Account number
10000591            WOODSP0     306089  343509
10000591            WOODSP0     116879  041145273
10000592            THOMSOS0    037125  317166

Screenshot 2

有什么想法?非常感谢您的意见!

屏幕截图在这里展示:

4 个答案:

答案 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 中保持前导零。

Split accounts and add new row(s)

答案 2 :(得分:0)

公式解决方案:

Image shown here.

分隔符:可以是真正的分隔符,也可以是仅包含分隔符的单元格的绝对引用。

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)

帮助者必须填充比数据更多的行。

使用方法:

  1. 复制上述三个公式生成的公式。
  2. 使用“选择性粘贴”仅粘贴值。
  3. 使公式生效。
  4. 填写公式。
  5. 错误:

    数字将转换为文字。当然,您可以删除公式末尾的&amp;“”,但空白单元格将填充0。

    PS。这种方法可能很难理解。但是一旦掌握了它,解决相关问题就非常有用了。

答案 3 :(得分:0)

您绝对可以使用拆分列选项使用Power Query转换数据以生成新行。

选中this article会详细说明该过程。

  1. 在excel的Power Query部分中加载数据。
  2. 创建索引(不需要的步骤)
  3. 将“拆分列”功能与高级选项一起使用,并将其拆分为新行。
  4. 将此结果保存到新表中供您使用。

我自己做的,它就像一种魅力。