Excel宏将Sheet1中的一列数据按字母顺序分配到Sheet2中的多个列

时间:2013-04-10 11:05:40

标签: excel-vba vba excel

我们有两张工作簿:Sheet1和Sheet2。 在Sheet1中,只有一列包含近100万个单元格(产品名称)的数据。 Sheet2具有现有数据(也是产品名称),其中第一行是为字母列标题保留的; A-Z和NUM(27门)。 我们所追求的是一个宏,它将对Sheet1 a-z0-9中的数据进行排序,然后将每个字母的数据块从Sheet1分发(移动)到Sheet2中每个指定列的数据的底部。 我们实际上已经在许多论坛中搜索了类似的解决方案,我们可以采用和适应,但我们基本上没有发现任何问题。任何人都可以帮助我们吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是一些有玩法的代码。 只需将其放入空白工作簿中即可:

  • 运行createRandomStrings()
  • 手动对Sheet1.ColumnA
  • 中的项目进行排序
  • 然后运行tmp()

它应该给你一个合作的想法。

您可以轻松记录正在进行的排序,以获取该代码。

Sub createRandomStrings()
    Dim curRow, curStr, curLtr, i
    Application.ScreenUpdating = False
    For curRow = 1 To 50000
        curStr = ""
        For i = 0 To 10
            curChar = Int((Asc("Z") - Asc("A") + 1) * Rnd + Asc("A"))
            curStr = curStr + Chr(curChar)
        Next i
        Cells(curRow, 1) = curStr
    Next curRow
    Application.ScreenUpdating = True
End Sub

Function findFirstItemStartingWith(startLetter) As Integer
    Dim curRow, curStr ', startLetter ** EDIT ** this var commented-out

    For curRow = 1 To 50000
        curStr = Cells(curRow, 1)
        If Mid(curStr, 1, 1) = startLetter Then
            findFirstItemStartingWith = curRow
            Exit Function
        End If
    Next curRow
    findFirstItemStartingWith = -1
End Function

Sub tmp()
    aStart = findFirstItemStartingWith("A")
    bStart = findFirstItemStartingWith("B")
    If (aStart <> -1) And (bStart <> -1) Then
        MsgBox ("A found from Row: " + Str(aStart) + " to " + Str(bStart - 1))
    End If
End Sub