在VBA中使用不同数据重复命令

时间:2017-06-19 14:51:32

标签: excel vba loops

我正在开发Excel Makro。 想知道,我如何使用不同的数据重复一些代码行,而无需复制和粘贴。

期待您的回答:) 这是我目前的代码:

Sub deleteredundant()

Windows("Test1.xlsm").Activate
If Range("A6") = Range("A7") And Range("B6") = Range("B7") Then
Range("A7:B7").Select
Selection.ClearContents
End If

End Sub

2 个答案:

答案 0 :(得分:0)

尝试下面的内容。

Sub deleteredundant()

Windows("Test1.xlsm").Activate

x = 1

Do While Range("a" & x).Formula <> ""

If Range("A" & x) = Range("A" & (x + 1)) And Range("B6" & x) = Range("B7" & (x + 1)) Then
Rows(x & ":" & x).Select
With Selection
.Delete EntireRow
End With

End If
x = x + 1
Loop

End Sub

答案 1 :(得分:0)

听起来@BruceWayne指出了你正确的方向,你需要什么 - 删除重复。

由于@Apurv Pawar显示你可以使用一个循环,但是他正在选择单元格(如果有任何代码表示选择或激活一个单元格而不是....你可以在不选择的情况下引用一个单元格。)

另一种方法是有一个删除单元格的过程,另一种方法是告诉它要查看哪个工作簿,工作表和单元格。

Sub DeleteRedundant(CheckRange As Range)

    If CheckRange = CheckRange.Offset(1) And CheckRange.Offset(, 1) = CheckRange.Offset(1, 1) Then
        CheckRange.Offset(1).Resize(, 2).ClearContents
    End If

End Sub  

上面的代码将接受传递给它的范围 它将检查传递的单元格是否等于自身下方的单元格:
CheckRange = CheckRange.Offset(1)

然后检查传递的单元格右侧的单元格是否等于下面的值:
CheckRange.Offset(, 1) = CheckRange.Offset(1, 1)

如果值匹配,它将查看传递的单元格下方的单元格,将其大小调整为两个单元格宽度并清除这两个单元格的内容:
CheckRange.Offset(1).Resize(, 2).ClearContents

通过这个程序,我们可以传递各种范围参考来进行操作:

Sub Test()

    DeleteRedundant Workbooks("Excel Worksheet1.xlsx").Worksheets("Sheet1").Range("A6")
    DeleteRedundant Workbooks("Excel Worksheet2.xlsx").Worksheets("Sheet2").Range("D5")

    'Pass every other cell to the procedure in a loop.
    'So will pass A2, A4, A6 - Cells(2,1), Cells(4,1) and Cells(6,1)
    Dim x As Long
    For x = 2 To 20 Step 2
        DeleteRedundant Workbooks("Excel Worksheet1.xlsx").Worksheets("Sheet1").Cells(x, 1)
    Next x

End Sub  

但是,正如@BruceWayne所说 - 你可能只需要数据功能区上的删除重复按钮。