【问题标题】:VBA: Build a Table by (Copy/Paste) by Using Criteria to Select Rows, Then Specifiy ColumnsVBA:通过(复制/粘贴)使用标准选择行,然后指定列来构建表
【发布时间】:2016-03-31 22:48:35
【问题描述】:

我想通过从另一个 Excel 工作表“效率”中提取数据来在一个 Excel 工作表“Ship”上构建一个表格。 “效率”表上的行数据按“发货”、“离开”、“进口”和“出口”分类。 每个类别(发货、离开、进口、出口)都有几个项目,它们没有特定的顺序。 “效率”表上的表格占据 A:H 列,从第 2 行开始;长度可以变化。 我希望能够搜索“已发货”的行并复制匹配行的 A、D:F 和 H 列,并将它们从“发货”表的单元格 B4 开始粘贴。谁能帮帮我?

子船()

ActiveSheet.Range("$A$1:$H$201").AutoFilter Field:=4, Criteria1:="Shipped"
' this is looking in a specific range, I want to make it more dynamic

Range("A4:A109").Select
'This is the range selected to copy, again I want to make this part more dynamic

Application.CutCopyMode = False
Selection.Copy
Range("A4:A109,D4:F109,H4:H109").Select
Range("G4").Activate
Application.CutCopyMode = False
Selection.Copy
Sheets("Ship").Select
Range("B4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

结束子

【问题讨论】:

  • 使用 VLOOKUP 或 OFFSET。我可以知道分类数据在哪一列运送、离开、导入和导出
  • B 列是这些分类的地方
  • @Krish,请找到已回答的代码
  • 我试过了。通过阅读它,它应该可以工作,但我没有得到任何可以适应的切实结果
  • @Krish,你得到了什么结果。你能详细说明一下吗

标签: vba excel


【解决方案1】:

此代码已根据您在问题中提供的信息进行了测试:

Sub Ship()

Dim wsEff As Worksheet
Dim wsShip As Worksheet

Set wsEff = Worksheets("Efficiency")
Set wsShip = Worksheets("Shipped")

With wsEff

    Dim lRow As Long
    'make it dynamic by always finding last row with data
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row

    'changed field to 2 based on your above comment that Shipped is in column B (the code you posted has 4).
    .Range("A1:H" & lRow).AutoFilter Field:=2, Criteria1:="Shipped"

    Dim rngCopy As Range
    'only columns A, D:F, H
    Set rngCopy = Union(.Columns("A"), .Columns("D:F"), .Columns("H"))
    'filtered rows, not including header row - assumes row 1 is headers
    Set rngCopy = Intersect(rngCopy, .Range("A1:H" & lRow), .Range("A1:H" & lRow).Offset(1)).SpecialCells(xlCellTypeVisible)

    rngCopy.Copy

End With

wsShip.Range("B4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False


End Sub

【讨论】:

  • 我得到一个运行时错误 '1004': No cells were found 这发生在'Set rngCopy = Intersect(rngCopy, .Range("A1:H" & lRow), .Range(" A1:H" & lRow).Offset(1)).SpecialCells(xlCellTypeVisible)'
  • @Kish - 确保 AutoFilter 行正在为您的数据过滤右列。我基于您的示例,但如果示例不正确,它将在过滤器中显示没有结果。根据您所做的评论,Field 参数在 AutoFilter 方法中应该是 2
  • 是的,它运行得更好,它是在 4 点。我会对其进行微调以得到我所需要的。谢谢
【解决方案2】:

试试下面的代码

Sub runthiscode()
    Worksheets("Efficiency").Select
    lastrow = Range("A" & Rows.Count).End(xlUp).Row
    startingrow = 4
    For i = 2 To lastrow
        If Cells(i, 2) = "Shipped" Then
            cella = Cells(i, 1)
            celld = Cells(i, 4)
            celle = Cells(i, 5)
            cellf = Cells(i, 6)
            cellh = Cells(i, 8)
            Worksheets("Ship").Cells(startingrow, 2) = cella
            Worksheets("Ship").Cells(startingrow, 5) = celld
            Worksheets("Ship").Cells(startingrow, 6) = celle
            Worksheets("Ship").Cells(startingrow, 7) = cellf
            Worksheets("Ship").Cells(startingrow, 9) = cellh
            startingrow = startingrow + 1
        End If
    Next i
End Sub

【讨论】:

  • @krish,它在我的最后工作。我可以知道你把上面的代码放在哪里吗?
  • 我尝试在VBA中运行,看起来像是用MATLAB写的代码
猜你喜欢
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多