excel - 如何使用 VBA 根据标准将数据集从一张表移动到另一张表
问题描述
我正在尝试将数据从一个名为 on 的表移动Raw_Data
到sheet Raw Data
另一个名为Phone_Number
on的表sheet No Quality
。
我的表格有16 列,我需要确认原始数据表的第 15 列是否包含No Quality或PH Phone字样。如果是这样,那么我想将数据移动到“无质量”表并将其粘贴到那里的表格中。粘贴后,我想从原始数据表中删除数据。
我尝试了几种不同的方法,但似乎无法让它们发挥作用。这是我使用的第一种方法
Sub Numbers()
Dim dataSheet As Worksheet, newSheet As Worksheet
Dim dataTable As ListObject, newTable As ListObject
Dim dataCount As Long
Dim checkOne As String, checkTwo As String
Dim copyRange As Range
Set dataSheet = Worksheets("Raw Data")
Set newSheet = Worksheets("No Quality")
Set dataTable = dataSheet.ListObjects("Raw_Data")
Set newTable = newSheet.ListObjects("Phone_Number")
checkOne = "PH Phone"
checkTwo = "No Quality"
dataCount = dataSheet.ListObjects("Raw_Data").ListRows.Count
dataValue = dataSheet.ListObjects("Raw_Data").DataBodyRange(dataCount, "O").Value
dataLocation = dataSheet.ListObjects("Raw_Data").DataBodyRange(dataCount, "O").row - 1
For i = 2 To dataLocation
valueToCheck = dataSheet.ListObjects("Raw_Data").DataBodyRange(i, "O")
If valueToCheck = checkOne Or valueToCheck = checkTwo Then
'Errors out on the line below
Worksheets("Raw Data").Range(Cells(i, "A"), Cells(i, "P")).Copy
Worksheets("No Quality").Cells(Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).row, 1).PasteSpecial
End If
Next i
End Sub
我可以让它部分运行,但它永远不会完成。我尝试使用以下代码,但我不确定如何更改它以按照我需要的方式运行。
Sub NoQuality()
Dim dataTable As Range
Dim newTable As Range
Application.ScreenUpdating = False
Set dataTable = Worksheets("Raw Data").ListObjects("Raw_Data").DataBodyRange
Set newTable = Worksheets("No Quality").ListObjects("Phone_Number").DataBodyRange
dataTable.Copy newTable.Offset(tbl2.Rows.Count)
Application.CutCopyMode = False
tbl1.ClearContents
Application.ScreenUpdating = True
End Sub
解决方案
您可能会使用更少的代码而侥幸逃脱。请尝试以下方法,让我知道情况如何。
Option Explicit
Sub Numbers()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Raw Data")
Set ws2 = Sheets("No Quality")
With ws1.ListObjects("Raw_Data").Range
.AutoFilter 15, "No Quality", 2, "PH Phone"
.Offset(1).Resize(.Rows.Count - 1).Copy ws2.Cells(2, 1)
.Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
ws1.ListObjects("Raw_Data").AutoFilter.ShowAllData
End With
End Sub
推荐阅读
- django - 如何在 django 2.0 中设置注册和信号
- java - Android - 使用类似于 @SerializedName 的内容注释 Retrofit2 POST / PATCH 请求正文
- java - HTTP 状态 500 - 实例化 servlet 类 com.sar.pkg.MyServlet 时出错
- paypal - 缺少基本参数
- vb.net - 使用 Visual Basic,我需要在 for next 循环中添加什么以使我的应用程序仅显示偶数?
- list - Haskell:用一个元素和一个列表连接一个元组列表:[(a,[b])] -> [(a,b)]
- oracle - 处理 ORA-01403: 未找到数据
- javascript - 使用纯 JavaScript (DOM) 和给定的对象数组创建表?
- java - p:rowExpansion 每次按下展开箭头时重复该组件
- perl - 通过准备和执行避免 SQL 注入