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