如何根据TRUE/FALSE条件复制/剪切数据行[Excel VBA]

efzxgjgh  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在寻找创建一个VBA,将复制所有行,满足条件的真在'产品价格表'表和粘贴到'客户名单'表。
并非所有列都需要复制,只有列A、B、C、D需要复制。
如果更多的真实条件在以后的时间得到满足,我要求“客户名单”表被清除和重新粘贴,以确保产品编号的连续性。
'Product Price List Screenshot'
'Customer List' Screenshot
我是一个编码新手,尝试过各种尝试,都无济于事。请善待:)谢谢。

mklgxw1f

mklgxw1f1#

假设:

  • 您的工作表设置完全如屏幕截图所示
  • Column H中的值为真布尔值(即不是伪装为布尔值的文本)
  • Customer List上的所有现有数据将被清除,并替换为与TRUE关联的更新值列表

宏步骤:

  • 遍历Price List上的行
  • 当循环中当前行的Column HTRUE时,则:
  • Column A - Column D中的值添加到Union,在代码中称为true_collection
  • Union只是一个单元格集合,在本用例中,它用于创建要复制/粘贴的非连续范围

一个更有效的方法是过滤你的数据集(Column H = TRUE),然后复制/粘贴过滤器的结果(可见)单元格,这或多或少是你手工做的。

Sub free_code_come_get_your_free_code_free_code()

Dim pl As Worksheet: Set pl = ThisWorkbook.Sheets("Price List")
Dim cl As Worksheet: Set cl = ThisWorkbook.Sheets("Customer List")

Dim lr As Long, i As Long
Dim true_collection As Range

lr = pl.Range("H" & pl.Rows.Count).End(xlUp).Row

For i = 5 To lr
    If pl.Range("H" & i) Then
        If Not true_collection Is Nothing Then
            Set true_collection = Union(true_collection, pl.Range("A" & i).Resize(1, 4))
        Else
            Set true_collection = pl.Range("A" & i).Resize(1, 4)
        End If
    End If
Next i
            

If Not true_collection Is Nothing Then
    lr = cl.Range("A" & cl.Rows.Count).End(xlUp).Offset(1).Row
    cl.Range("A5:D" & lr).Clear
    
    true_collection.Copy
    cl.Range("A5").PasteSpecial xlPasteValues
End If

End Sub

相关问题