如果满足两个条件,则使用 VBA 将特定列复制到另一张纸

问题描述 投票:0回答:1

我是 VBA 新手:',我想知道是否可以在 VBA 中使用 If AND 函数。当 C 列和 D 列填满值时,VBA 将自动复制 A、B 和 E 列并将它们粘贴到另一个工作表。另外,如果可能的话,我想让它变得动态。

例如,我在Sheet1中有这张表:

姓名 电话# 班级 毕业了 分数
阿丽亚娜 749142 9 是的 3.6
布莱恩 454364 3.7
哈利 143246 12 是的 4
麦迪 356647 10 2.9

C 列和 D 列需要在两个单元格内都有一个值,然后 VBA 会将 A、B 和 E 列复制到 Sheet2 中的 A、B 和 C 列。

但是,如果出现以下情况,VBA 不会对该行执行任何操作:

  • 只有一列有价值(例如第 5 行)

  • 两列都没有值(例如第 3 行)

我希望这是有道理的:)

excel vba excel-2010
1个回答
0
投票
  • 右键单击 Sheet1 选项卡 >
    View Code
    > 将代码粘贴到 Sheet1 模块中

微软文档:

应用程序.相交方法(Excel)

Range.CountLarge 属性 (Excel)

工作表.更改事件(Excel)

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Me.Range("C:D")) Is Nothing Then
        With Target
            If .CountLarge = 1 Then
                Dim iR As Long: iR = .Row
                If Len(Me.Cells(iR, "C")) > 0 And Len(Me.Cells(iR, "D")) > 0 Then
                    Dim lastRow As Long, oSht As Worksheet
                    Set oSht = Sheets("Sheet2")
                    lastRow = oSht.Cells(oSht.Rows.Count, "A").End(xlUp).Row
                    If Len(oSht.Cells(lastRow, 1)) > 0 Then lastRow = lastRow + 1
                    oSht.Cells(lastRow, 1).Resize(1, 3).Value = _
                        Array(Me.Cells(iR, "A"), Me.Cells(iR, "B"), Me.Cells(iR, "E"))
                End If
            End If
        End With
    End If
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.