Excal-VBA:将一串数字数字转换为行,并在之后添加循环名称

我有一个问题,我目前使用大量的手动时间。

我有以下简单的数据:

在这里输入图像说明

我希望将所有帐户向下转换为另一列中帐户旁边的名称。 目前我通过使用“文本到列”function,然后手动将名称复制下来..硬工作.. 🙂

这是我希望场景的一个例子。

在这里输入图像说明

希望你能帮助..

非常感谢Kristoffer

下面的短macros将从Sheet1中获取数据并在Sheet2中输出logging:

Sub DataReorganizer() Dim i As Long, j As Long, N As Long Dim s1 As Worksheet, s2 As Worksheet Set s1 = Sheets("Sheet1") Set s2 = Sheets("Sheet2") N = s1.Cells(Rows.Count, "A").End(xlUp).Row j = 1 For i = 2 To N v1 = s1.Cells(i, 1) ary = Split(s1.Cells(i, 2), ";") For Each a In ary s2.Cells(j, 1).Value = v1 s2.Cells(j, 2).Value = a j = j + 1 Next a Next i End Sub 

input:

在这里输入图像说明

和输出:

在这里输入图像说明

尝试这个

 Option Explicit Sub Test() Dim rng As Excel.Range Set rng = ThisWorkbook.Worksheets.Item(1).Cells(1, 1).CurrentRegion Set rng = rng.Offset(1) Set rng = rng.Resize(rng.Rows.Count - 1) Dim vPaste Dim lTotalRows As Long Dim lPass As Long For lPass = 0 To 1 Dim rowLoop As Excel.Range For Each rowLoop In rng.Rows Dim sName As String sName = rowLoop.Cells(1, 1) Dim sAccounts As String sAccounts = rowLoop.Cells(1, 2) Dim vSplitAccounts As Variant vSplitAccounts = VBA.Split(sAccounts, ";") If lPass = 0 Then lTotalRows = lTotalRows + UBound(vSplitAccounts) + 1 Else Dim vLoop As Variant For Each vLoop In vSplitAccounts lTotalRows = lTotalRows + 1 vPaste(lTotalRows, 1) = sName vPaste(lTotalRows, 2) = vLoop Next vLoop End If Next If lPass = 0 Then ReDim vPaste(1 To lTotalRows, 1 To 2) lTotalRows = 0 End If Next ThisWorkbook.Worksheets.Item(2).Cells(1, 1).Value = "Name" ThisWorkbook.Worksheets.Item(2).Cells(1, 2).Value = "Account" Dim rngPaste As Excel.Range Set rngPaste = ThisWorkbook.Worksheets.Item(2).Cells(2, 1).Resize(lTotalRows, 2) rngPaste.Value2 = vPaste End Sub