excel - 捕获数据,然后在现有代码中创建循环
问题描述
我创建了一个电子表格,其中包含一个宏,当 A 列中的状态标记为“已付款”时,该宏将删除并移动到新选项卡的一行。我需要更进一步,以便如果状态标记为“已付款”并且 D 列中的发票编号与同一行匹配,那么所有相同的发票 #s 也将被移动到新选项卡。
捕获该行发票编号的代码是什么?
然后在第一个循环中执行另一个 for 循环,该循环遍历所有行并将所有与发票编号匹配的行移动到插入 After If CStr(xRg(K).Value) = "paid"
。当前电子表格图像。我正在使用的代码如下。该图像是电子表格的片段。在示例中,Sarah Phillips 的第 9-12 行中的数据在 A 列第 9 行中具有“已付款”状态。我需要具有相同发票编号的所有 4 个数据移动到新的电子表格。
我是编写代码的新手,建议我捕获该行的发票编号,然后在第一个循环内循环遍历所有行并移动这些行。我不知道如何执行此操作或修改当前代码,以便包含该建议。
Sub TransferData()
Dim xRg As Range
Dim xCell As Range
Dim I As Long, J As Long, K As Long
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("Sheet1").Range("A1:A" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "paid" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
xRg(K).EntireRow.Delete
If CStr(xRg(K).Value) = "paid" Then
K = K - 1
End If
J = J + 1
End If
Next
Application.ScreenUpdating = True
End Sub
我希望当 A 行标记为“已付款”并执行宏时,所有具有匹配发票编号的行都会被移动。
解决方案
我建议进行以下更改。
- 使用
For
循环。它更容易,您将能够更轻松地跟随。 - 删除宏末尾的行。这可以通过
KillRnG
下面的代码来完成。 您可以使用
Offset
来从匹配行的其他列中收集信息。看我的例子。'If you insert this immediately after you turn off screen 'updating you can loop through your rows. dim aCell as Range For Each aCell In Intersect(Range("A:A", ActiveCell.UsedRange)).Cells If UCase(aCell.Value) = "PAID" Then 'do your thing of copying the row to some other other sheet. 'set the row for deletion... this will be done at the end. Set killRNG = Union(killRNG, aCell.EntireRow) Debug.Print "This is the invoice: " & aCell.Offset(0, 3).Value End If Next cell 'This will delete whatever you wanted killRNG.ClearContents killRNG.Delete
推荐阅读
- angular - PWA Angular 应用程序名称在部署后停留在旧名称上 - 如何强制更新?
- ruby-on-rails - Rails 是否从发布请求的参数键中删除问号?
- wordpress - 如何阻止 x-robots-tag 在我的整个网站上设置 noindex?
- python - 试图将 pd.date_range 合并到我的 python 分析中
- vb.net - vb.net / C# 外部处理程序
- android - 如何在 Android 上管理 startActivityForResult?
- php - What encoding is the resulting string if I concatenate a UTF-8 encoded string with an ASCII string in PHP?
- ios - “provideCredentialWithoutUserInteractionForIdentity:”不起作用
- validation - 错误消息 Multi Part Identifier could not be bound
- c++ - ˋtypedefˋ 中的异常规范完全禁止还是仅在顶层?