-2

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

4

1 回答 1

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
于 2013-04-10T11:54:17.143 回答