如何从单列字符串数据创建多列Excel表,在将新行添加到数据时自动添加行?

时间:2015-04-07 23:16:04

标签: excel vba excel-vba

我在sheet1上有多行单字符串数据,我使用MID公式在sheet2上分隔成多列;如果我向sheet1添加新的字符串数据行,我如何自动将相同的MID公式添加到每个添加的行的每列中?

以下是这两张纸目前的样子:

[sheet1] - 字符串数据

1239876010407201520.00

4566543010407201550.00

7893210010407201560.00

Sheet 2中

号码用户类型日期金额

123 9876 1 4/7/2015 $ 20.00

456 6543 1 4/7/2015 $ 50.00

789 3210 1 4/7/2015 $ 60.00

如果我向sheet1添加一行字符串数据,如何让Excel自动添加一行并将相同的MID公式应用于sheet2上的每个表格列?

2 个答案:

答案 0 :(得分:0)

你可以将你的mid公式包装在一个iferror公式中,如果它是一个错误就把它设置为空白,然后将它拖到一堆行中,哪里有数据它会解决,哪里没有它只会是空白给人的感觉那里什么都没有。

如果您发布原始的mid公式,我会给你一个例子,测试单元格而不是使用iferror可能是谨慎的,因为iferror会捕获真正的错误。

答案 1 :(得分:0)

右键单击Sheet1的名称标签,然后选择查看代码。当VBE打开时,将以下内容粘贴到标题为 Book1 - Sheet1(Code)

的代码表中
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(1)) Is Nothing Then
        On Error GoTo Safe_Exit
        Application.EnableEvents = False
        Dim rng As Range, str As String, rw As Long
        For Each rng In Intersect(Target, Columns(1))
            str = rng.Value
            If Len(str) >= 18 Then
                With Sheet2 'using sheet codename in case it gets reordered or renamed
                    rw = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                    .Cells(rw, 1) = Left(str, 3)
                    .Cells(rw, 2) = Mid(str, 4, 4)
                    .Cells(rw, 3) = Mid(str, 8, 2)
                    .Cells(rw, 4) = DateSerial(Mid(str, 14, 4), Mid(str, 10, 2), Mid(str, 12, 2))
                    .Cells(rw, 5) = CCur(Mid(str, 18, 99))
                End With
            End If
        Next rng
    End If
Safe_Exit:
    Application.EnableEvents = True
End Sub

点击 Alt + Q 返回工作表。键入或粘贴到列A中的任何值都将被剥离并拆分为5个值,并填充到Sheet2列A:E中的第一个可用行中。在尝试处理之前,我已将最小长度设置为18个字符。这一长度相当于一年后的右手端数量的一位数。