` 选项明确
Sub MoveToSheet() 范围( “A2:A9”)。选择
If Range("A2:A9").Value = "1" Then
Sheets("Sheet1").Range("B2:B9").Copy Destination:=Sheets("Sheet3").Range("A2:A9")
Do
ActiveCell.Offset(1, 0).Select
Loop
End If
有一个带有ItemId和ItemName的Excel工作表。对于单个ItemID,有4-5个ItemName。需要使用VBA Excel编程将此工作表中的数据转储到另一个工作表中。 转储数据的工作表应在单个ItemId的不同列中列出ItemName。
答案 0 :(得分:0)
您收到类型不匹配错误,因为您尝试从一系列单元格Range("A2:A9").Value
中获取值,我认为此语法仅适用于单个单元格,例如Range("A2").Value
。然后你有一个Do...Loop
,它将循环到spreasheet的最后一行,因为没有条件检查。
拜托,你能试试这个子程序吗?您可以将其放在模块中并从VBA编辑器中调用它或将其链接到按钮。我假设您的商品按itemID排序。
Sub copyItems()
Sheets("Sheet1").Activate
' This will clear your destination worksheet. Change the range to your needs
Sheets("Sheet3").Range("A2:Z999").ClearContents
Dim itemID As Integer, startRow As Integer, endRow As Integer
startRow = 2
Do
itemID = Sheets("Sheet1").Cells(startRow, 1)
endRow = startRow + WorksheetFunction.CountIf(Sheets("Sheet1").Range("A:A"), itemID) - 1
Sheets("Sheet3").Range("A2:A" & endRow - startRow + 2).Offset(0, itemID - 1).Value = _
Sheets("Sheet1").Range("B" & startRow & ":B" & endRow).Value
startRow = endRow + 1
Loop While Cells(startRow, 1).Value <> ""
End Sub
您应该看到您的商品放在Sheet3的不同列中(itemID = 1的列A,itemID = 2的B列,依此类推)
捕获字母数字ItemID的新例程
Sub copyItems2()
Dim itemID As String, startRow As Integer, endRow As Integer, itemNum As Integer
Dim source As String, destination As String
startRow = 2
itemNum = 1
source = "Sheet1"
destination = "Sheet3"
Sheets(source).Activate
' This will clear your destination worksheet. Change the range to your needs
Sheets(destination).Range("A2:Z999").ClearContents
Do
itemID = Sheets(source).Cells(startRow, 1)
endRow = startRow + WorksheetFunction.CountIf(Sheets(source).Range("A:A"), itemID) - 1
Sheets(destination).Range("A2:A" & endRow - startRow + 2).Offset(0, itemNum - 1).Value = _
Sheets(source).Range("B" & startRow & ":B" & endRow).Value
startRow = endRow + 1
itemNum = itemNum + 1
Loop While Cells(startRow, 1).Value <> ""
End Sub
这个也应该处理字母数字代码。